Java XML 技术:(三)DOM 方式解析 XML 数据

标签: Java基础深化与提高  java  xml  dom

1.解析 XML 文件的方式

在 Java 程序中读取 XML 文件的过程称为解析 XML

  • DOM 解析 (java 官方提供)
  • SAX 解析(java 官方提供)
  • JDOM 解析(第三方提供)
  • DOM4J 解析(第三方提供)

2.DOM 解析 XML 的步骤

XML:

<?xml version="1.0" encoding="UTF-8"?>
<persons xsi:noNamespaceSchemaLocation="{some.xsd}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <person id="1001">
        <name>张三</name>
        <age>18</age>
    </person>
    <person id="1002">
        <name>李四</name>
        <age>20</age>
    </person>
</persons>

解析代码:

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;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

public class Text{
    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
        //创建一个DocumentBuilderFactory的对象
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        //创建一个DocumentBuilder对象
        DocumentBuilder db=dbf.newDocumentBuilder();
        //通过DocumentBuilder的parse(...)方法得到Document对象
        Document doc=db.parse("some.xml");
        //通过getElementsByTagName(...)方法获取到节点的列表
        NodeList bookList=doc.getElementsByTagName("persons");
        //通过for循环遍历每一个节点
        for(int i=0;i<bookList.getLength();i++){
            //得到每个节点的属性和属性值
            Node book=bookList.item(i);
            NamedNodeMap attrs=book.getAttributes(); //得到了属性的集合
            //循环遍历每一个属性
            for(int j=0;j<attrs.getLength();j++){
                //得到每一个属性
                Node id=attrs.item(j);
                System.out.println("属性的名称:"+id.getNodeName()+"\t"+id.getNodeValue());
            }
        }
        System.out.println("\n每个节点的名和节点的值");
        //得到每个节点的节点名和节点值
        for(int i=0;i<bookList.getLength();i++){
            //得到每一个person节点
            Node book=bookList.item(i);
            NodeList subNode=book.getChildNodes();
            System.out.println("子节点的个数:"+subNode.getLength());
            //使用for循环遍历每一person的子节点
            for(int j=0;j<subNode.getLength();j++){
                Node childNode=subNode.item(j);
                short type=childNode.getNodeType(); //获取节点的类型
                if(type==Node.ELEMENT_NODE){
                    System.out.println("节点的名称:"+childNode.getNodeName()+"\t"+childNode.getTextContent());
                }
            }
        }
    }
}

效果图:
效果图

版权声明:本文为qq_45017999原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45017999/article/details/106032500