java中以DOM方式来对xml文件进行解析操作

来源:互联网 发布:淘宝客单价算法 编辑:程序博客网 时间:2024/05/06 16:36

要进行解析的xml文件对象:

<?xml version="1.0" encoding="UTF-8" ?><bookstore><book id="1"><name>冰与火之歌</name><author>乔治马丁</author><year>2014</year><price>89</price></book><book id="2"><name>安徒生童话</name><author>安徒生</author><year>2017</year><price>77</price><language>Chinese</language></book></bookstore>
源代码:

import java.io.IOException;import java.util.ArrayList;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class DOMTEST {//以dom方式来对所创建的xml文件进行解析操作public static void main(String[] args) {ArrayList<Book> bookEmptyList=new ArrayList<Book>(); //建立一个book集合对象用于将对book标签对象当中所解析而成的bookEmpty实例化对象进行保存操作Book bookEmpty=null;//建立一个book实体类的对象用于对从xml文件对象当中所解析出来的book标签对象当中的数据信息进行保存操作//1:实例化一个doucmentBuilderFactory实例化对象DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//2:创建一个documentBuilder对象try {DocumentBuilder db=dbf.newDocumentBuilder();//3:通过documentBuilder对象来对xml文件对象进行解析操作Document document=db.parse("xml文件/books.xml");//对xml文件进行解析之后返回一个document(w3c)对象NodeList bookList=document.getElementsByTagName("book");//获取xml文件对象当中的全部book标签对象并以节点集合的形式来进行返回操作System.out.println("一共有"+bookList.getLength()+"本书。");//对book标签节点集合对象进行遍历操作for(int i=0;i<bookList.getLength();i++){System.out.println("=============================下面开始遍历第"+(i+1)+"本书的内容。=======================================");bookEmpty=new Book();//开始对当前book标签进行解析操作时,建立一个与之相对应的book实体类实例化对象用于对所解析出来的数据信息值进行保存Node book=bookList.item(i);//对集合数组对象当中的元素开始进行遍历操作,获取节点集合当中的节点对象NamedNodeMap attrs=book.getAttributes();//获取当前节点对象当中的全部的属性值对象并将其存放到map集合对象当中去//对当前节点当中的全部属性值进行遍历操作System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");for(int j=0;j<attrs.getLength();j++){Node attr=attrs.item(j);//获取属性集合对象当中的第i个属性节点对象System.out.print("属性名:"+attr.getNodeName());//对当前节点的名字进行输出操作System.out.println("---属性值:"+attr.getNodeValue());//对当前节点的属性有效值进行输出操作if(attr.getNodeName().equals("id")){//表明当前解析到了book标签当中的id属性值对象bookEmpty.setId(attr.getNodeValue());//将当前所解析到的id属性值存放到book实例化对象当中}}//下面这种方式来对book标签对象当中的属性值进行输出的前提是知道了book标签对象当中只有一个属性对象为ID//Element book=(Element)bookList.item(i);//获取book集合对象当中的第i个book对象并将其进行强制转换类型操作//String attrValue=book.getAttribute("id");//System.out.println("属性名id:---"+attrValue);//System.out.println("==============================结束对第"+(i+1)+"本书的遍历操作。=========================================\n");//4:当对book标签节点解析完毕之后将开始对其子节点进行解析操作NodeList childNode=book.getChildNodes();//得到当前book节点的全部子节点对象,并且以一个节点集合的形式来进行返回操作//遍历book节点的全部子节点对象System.out.println("第"+(i+1)+"本书当中共有"+childNode.getLength()+"个子节点.");//此时会显示有9个子节点,但是在xml文档当中可以看到只有四个子节点,是因为系//统会自动的将book标签于子节点,子节点和字节点之间的空格+换行看做是一个节点//对book标签当中的子节点进行遍历输出操作for(int k=0;k<childNode.getLength();k++){//对子节点集合当中的第k项子节点对象的名字进行输出操作//System.out.println(childNode.item(k).getNodeName());//在所输出的子节点名称当中#text代表的就是空白节点对象if(childNode.item(k).getNodeType()==Node.ELEMENT_NODE){//只对含有标签对象的元素节点进行输出操作,对为空白的文本对象节点(#text)不进行输出操作System.out.print("第"+(k+1)+"个节点的节点名:"+childNode.item(k).getNodeName());//获取子节点对象的节点名字//获取子节点对象的有效值//System.out.println(childNode.item(k).getNodeValue());//输出将为null,是因为该方法只能够获取当前子节点标签当中value属性值对象当中的有效值,而子节点//标签之间所添加的信息内容则是属于当前子节点的子节点,所以是无法进行获取的//获取子节点标签当中的数据信息,即获取element对象当中的值//System.out.println("---节点值是:"+childNode.item(k).getFirstChild().getNodeValue());//获取当前子节点对象的第一个子节点,并将其有效值进行输出操作System.out.println("---节点值是:"+childNode.item(k).getTextContent());//直接获取当前子节点对象当中的文本值数据信息if(childNode.item(k).getNodeName().equals("name")){//当当前所解析的book子标签对象为name子标签时,将其对应的有效值存放到book实例化对象当中去bookEmpty.setName(childNode.item(k).getTextContent());}if(childNode.item(k).getNodeName().equals("author")){//当前所解析到的为author子标签对象bookEmpty.setAuthor(childNode.item(k).getTextContent());}if(childNode.item(k).getNodeName().equals("year")){bookEmpty.setYear(childNode.item(k).getTextContent());}if(childNode.item(k).getNodeName().equals("price")){//如果当前所解析到的子标签对象为price标签bookEmpty.setPrice(childNode.item(k).getTextContent());}if(childNode.item(k).getNodeName().equals("language")){bookEmpty.setLanguage(childNode.item(k).getTextContent());}}}//当对book标签对象当中的全部子标签进行解析完成的同时对bookEmpty实例化对象当中的数据也保存完毕bookEmptyList.add(bookEmpty);//将当前所解析完成的bookEmpty实例化对象保存到数组对象当中bookEmpty=null;//清空当前bookEmpty实例化对象准备开始对下一个将要进行解析的book标签当中的数据信息值进行保存操作System.out.println("==============================结束对第"+(i+1)+"本书的遍历操作。=========================================\n");}} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}//对bookEmptyList集合对象当中所存放的book实例化对象进行遍历输出操作for(Book book:bookEmptyList){//对book集合对象当中的数据信息进行遍历输出操作System.out.println(book.getId());System.out.println(book.getName());System.out.println(book.getAuthor());System.out.println(book.getPrice());System.out.println(book.getYear());System.out.println(book.getLanguage());System.out.println("----------------finish--------------");}}}

程序运行之后的结果为:




阅读全文
0 0
原创粉丝点击