dom解析xml

dom解析xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <name>追风筝的人</name>
        <author>卡勒德·胡赛尼 </author>
        <year>2005</year>
        <price>30</price>
    </book>
    <book id="2">
        <name>基督山伯爵</name>
        <year>2007</year>
        <price>40</price>
        <language>English</language>
    </book>
</bookstore>

测试代码

package com.xml.test;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLTest {

    public static void main(String[] args) {
        
        //创建DocumentBuilderFactory对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        
        try {
            //创建DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //通过DocumentBuilder对象的parse方法加载xml到当前项目下
            Document document = db.parse("books.xml");
            //获取book节点的集合
            NodeList bookList = document.getElementsByTagName("book");
            //nodelist长度
//            System.out.println(bookList.getLength());
            
            //遍历每一个book节点
            for(int i = 0 ; i < bookList.getLength(); i++){
//                //不知道属性名解析节点属性
//                //通过item方法获取节点,nodelist的索引值从0开始。
//                Node node = bookList.item(i);
//                //获取book节点的所有属性集合
//                NamedNodeMap nodeMap = node.getAttributes();
//                //遍历book的属性
//                for(int j = 0 ;j < nodeMap.getLength(); j++){
//                    nodeMap.item(j).getNodeName();
//                    nodeMap.item(j).getNodeValue();
//                }
                
//                //知道属性名解析节点属性
//                //强制类型装换,转成element
//                Element element =  (Element)bookList.item(i);
//                //获取属性值
//                System.out.println(element.getAttribute("id"));
                
                //解析子节点
                
                Node node = bookList.item(i);
                
                NodeList childNode = node.getChildNodes();
                //遍历子节点
                for(int k = 0;k < childNode.getLength();k++){
                    //过滤#text类型的节点
                    if(childNode.item(k).getNodeType() == Node.ELEMENT_NODE){
                        
                        System.out.println(childNode.item(k).getNodeName());
                        //把value看成了标签的子节点,获取节点值
                        System.out.println(childNode.item(k).getFirstChild().getNodeValue());
//                        //获取节点值,获取节点下的所有text值。 注意和上面的不同
//                        System.out.println(childNode.item(k).getTextContent());
                        
                    }
                    
                }
                
            }
            
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
原文地址:https://www.cnblogs.com/yeming/p/5368639.html