java解析xml文件(dom)

 

package com.xt.xmltest;

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;

public class XmlTest {

    public static void main(String[] args) throws Exception {
        //获得DocumentBuilderFactory对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //获得DocumentBuilder对象
        DocumentBuilder db = dbf.newDocumentBuilder();
        //加载book.xml
        //相对路径、绝对路径都行
        Document document = db.parse("book.xml");
        //获得book节点集合
        NodeList bookList =  document.getElementsByTagName("book");
        System.out.println("================一共有"+bookList.getLength()+"本书。================");
        //循环遍历book节点集合
        for(int i = 0; i<bookList.getLength();i++){
            //获得第i+1个book节点
            Node book = bookList.item(i);
            //获得第i+1个book节点中的属性的map集合
            NamedNodeMap attrs = book.getAttributes();
            //获得获得第i+1个book节点中的子节点的集合
            NodeList childNodeList = book.getChildNodes();
            System.out.println("第"+(i+1)+"个book节点中,共有"+attrs.getLength()+"个属性。");
            for(int j=0;j<attrs.getLength();j++){
                //获得属性名称
                System.out.println("第"+(j+1)+"个属性名称是:"+attrs.item(j).getNodeName());
                //获得属性值
                System.out.println("第"+(j+1)+"个属性值是:"+attrs.item(j).getNodeValue());
            }
            //输出的结果应该是:7,9。因为在java解析xml文件的时候,会将 换行 当成一个子节点
            System.out.println("第"+(i+1)+"个book节点中,共有"+childNodeList.getLength()+"个子节点。");
            for(int j=0;j<childNodeList.getLength();j++){
                //将换行产生的子节点去除
                if(childNodeList.item(j).getNodeType()==Node.ELEMENT_NODE){
                    //获得子节点名称以及节点值
                    //获得节点值得时候要注意:java解析过程中,会将节点之间的内容看成是子节点的子节点
                    System.out.println(childNodeList.item(j).getNodeName()+"-------->"+childNodeList.item(j).getFirstChild().getNodeValue());
                    System.out.println("==================================");
                }
            }
        }

    }

}
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
    <book id="1">
        <name>钢铁是怎样炼成的</name>
        <author>奥斯特洛夫斯基</author>
        <price>99</price>
    </book>
    <book id="2">
        <name>安徒生童话</name>
        <author>安徒生</author>
        <price>99</price>
        <year>1999</year>
    </book>
</bookstore>

 

posted @ 2018-03-06 22:09  Coder_Song  阅读(139)  评论(0编辑  收藏  举报