JAVA解析XML文件(一)---DOM方式

来源:互联网 发布:mac word2016 取代功能 编辑:程序博客网 时间:2024/05/22 07:58

JAVA解析XML文件(一)—DOM方式解析

1.XML文件内容:

<?xml version="1.0"  encoding="UTF-8"?><bookstore>    <book id="1">        <name>冰与火之歌</name>        <author>乔治·马丁</author>        <year>2015</year>        <price>200</price>    </book>    <book id="2">        <name>光荣与梦想</name>        <year>2004</year>        <price>150</price>        <publish>科学出版社</publish>    </book></bookstore>

2.JAVA代码:

    public DocumentBuilder getDocumentBuilder(){        //创建DocumentBuilderFactory对象        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        //创建DocumentBuilder对象        DocumentBuilder db = null;        try {            db = dbf.newDocumentBuilder();        } catch (ParserConfigurationException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return db;    }
public void domParser(){        try {            //通过DocumentBuilder对象的parse方法加载xml文件到当前项目下            Document document = getDocumentBuilder().parse("MyFirstXML.xml");            //获取book标签的列表            NodeList booklist = document.getElementsByTagName("book");            System.out.println("一共有"+booklist.getLength()+"本书");            for(int i=0; i<booklist.getLength(); i++){                System.out.println("***************开始遍历第"+(i+1)+"本书的内容***************");                //通过book标签的索引获取节点                Node book = booklist.item(i);                //取得节点对应的属性值,可能有一个或者多个属性                NamedNodeMap attrs = book.getAttributes();                //通过getlength()方法可以获取属性的长度,也就是有几个属性                System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");                for(int j=0; j<attrs.getLength(); j++){                    //获取节点属性的列表                    Node attr = attrs.item(j);                    //获取节点属性的名称和值                    System.out.print("第"+(j+1)+"个属性的名称是:"+attr.getNodeName()+"--->");                    System.out.println("它的值为:"+attr.getNodeValue());                }                //当已知该标签有一个属性为id时,可以用Element来获取属性及它的值//              //将节点强转为element类型//              Element book = (Element)booklist.item(i);//              //通过getAttribute方法获取属性值//              String attrvalue = book.getAttribute("id");//              System.out.println("id属性的值为:"+attrvalue);                //获取子节点及其对应的属性值                //获取子节点                NodeList childnodes = book.getChildNodes();                System.out.println("第"+(i+1)+"个节点共有"+                        childnodes.getLength()+"个子节点");                //遍历子节点                for(int k=0; k<childnodes.getLength(); k++){                    if(childnodes.item(k).getNodeType() == Node.ELEMENT_NODE){                        System.out.print("第"+(k+1)+"个子节点的名称是:"+                                childnodes.item(k).getNodeName());                              //获取子节点的值要先用到getFirstChild()方法,再调用其getValue方法,                        //否则只能获取到null值                        //System.out.println("--->对应的值为:"+childnodes.item(k).getNodeValue());                        //System.out.println("--->对应的值为:"+childnodes.item(k).getFirstChild().getNodeValue());                        System.out.println("--->对应的值为:"+childnodes.item(k).getTextContent());                    }                }                System.out.println("***************遍历第"+(i+1)+"本书的内容结束***************");                System.out.println();            }        } catch (SAXException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }
0 0
原创粉丝点击