美文网首页Java开发
解析XML文件的方式(二)之DOM

解析XML文件的方式(二)之DOM

作者: 风中小酌 | 来源:发表于2020-02-01 22:29 被阅读0次

    0、要处理的XML文件

    <?xml version="1.0" encoding="UTF-8"?>
    <books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <book id="1001">
            <name>JAVA 高级编程</name>
            <author>张三</author>
            <price>85.72</price>
        </book>
        <book id="1002">
            <name>C++和C#</name>
            <author>李失失</author>
            <price>125.73</price>
        </book>
    </books>
    

    1、DOM方式解析XML数据的步骤

    a. 创建一个DocumentBuilderFactory对象
    b. 创建一个DocumentBuilder对象
    c. 通过DocumentBuilder的parse()方法,得到Document对象
    d. 通过getElementsByTagName()方法,获取节点的列表
    e. 使用for循环遍历节点
    f. 得到所有节点的属性和属性值
    g. 得到所有节点的节点名和节点值

    import java.io.IOException;
    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 TestDom4Xml {
        public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
            //创建一个DocumentBuilderFactory对象
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            //创建一个DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //通过DocumentBuilder的parse()方法,得到Document对象
            Document doc = db.parse("book.xml");
            //通过getElementsByTagName()方法,获取节点的列表
            NodeList nodelist = doc.getElementsByTagName("book");
            System.out.println(nodelist.getLength());
            //使用for循环遍历节点
            for(int i=0;i<nodelist.getLength();i++){
                Node node = nodelist.item(i);
                //得到所有节点属性和属性值的对象
                NamedNodeMap nnm = node.getAttributes();
                for(int j=0;j<nnm.getLength();j++){
                    Node sub_node = nnm.item(j);
                    //得到所有节点的属性和属性值
                    System.out.println(sub_node.getNodeName() + " : " + sub_node.getNodeValue());
                }
                //得到所有节点的子节点
                NodeList childlist = node.getChildNodes();
                for(int j=0;j<childlist.getLength();j++){
                    Node sub_node = childlist.item(j);
                    //获取节点类型
                    short type = sub_node.getNodeType();
                    //判断节点类型是否不为#text,因会将前一标签的末尾>与下一标签的开头<之间的字符,标记为#text
                    //因此这里需要进行判断
                    if(type == Node.ELEMENT_NODE){
                        //得到所有节点的节点名和节点值
                        System.out.println(sub_node.getNodeName() + " : " + sub_node.getTextContent());
                    }
                }
            }
        }
    }
    

    2、输出结果如下

    2
    id : 1001
    name : JAVA 高级编程
    author : 张三
    price : 85.72
    id : 1002
    name : C++和C#
    author : 李失失
    price : 125.73

    相关文章

      网友评论

        本文标题:解析XML文件的方式(二)之DOM

        本文链接:https://www.haomeiwen.com/subject/hzffxhtx.html