Dom解析xml,只是简单的解析出有效元素的元素名,元素值,属性名和属性值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dom解析xml,只是简单的解析出有效元素的元素名,元素值,属性名和属性值相关的知识,希望对你有一定的参考价值。

DOM使用简单,但只适合于一些小的Xml文档,因为Dom解析Xml文档时,要将其读入内存,生成DOM树。

具体操作方法如下

要解析的XML文档

<persons>
    <person id="1001">
        <name><![CDATA[<>上上</>]]></name> <!--  <![CDATA[<>上上</>]]> 预定义字符3.
        -->
        <sex>男</sex>
        <mobile>123456</mobile>
        <address>
            <country>中国</country>
            <province>湖南</province>
            <city>衡阳</city>
        </address>    
    </person>
    <person id="1002">
        <name>tom</name>
        <sex>女</sex>
        <mobile>654321</mobile>
        <address>
            <country>美国</country>
            <province>纽约</province>
            <city>不知道</city>
        </address>    
    </person>
</persons>

DOM解析

package com.yc.xml.study01;

import java.io.FileInputStream;
import java.io.InputStream;

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 DOMParseDemo01{
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//文档构建工厂对象
        DocumentBuilder  builder=factory.newDocumentBuilder();//
        InputStream in=new FileInputStream("study/study01.xml");//读取xml文件数据流
        Document doc=builder.parse(in);//加载xml文件数据流,通过文档构建对象,构建出树状结构的文档对象
        
        Node headNode=doc.getDocumentElement();//取到根节点
        listAllChildNodes(headNode, 0);
    }

    private static void listAllChildNodes(Node node, int level) {
        // TODO Auto-generated method stub
        if (node.getNodeType() == Node.ELEMENT_NODE) {
             System.out.println("+++++++++++++++++"+node.getNodeName()+"+++++++++++++++"+node.getFirstChild().getNodeValue());//打印出元素名,元素值
             if (node.hasAttributes()) { //判断该节点是否有属性
                    NamedNodeMap nnmap = node.getAttributes();  //获取属性
                    for (int i = 0; i < nnmap.getLength(); i++) {  
                        System.out.println(nnmap.item(i).getNodeName()  + nnmap.item(i).getNodeValue());//打印出属性名,属性值
                    }
             }
             if(node.hasChildNodes()){//如果这个节点有子节点
                 NodeList nodelist = node.getChildNodes(); //取到所有子节点并存到一个数组里,NodeList可以看成一个数组
                 level++;
                 for (int i = 0; i < nodelist.getLength(); i++) {  
                     if (nodelist.item(i).getNodeType() == Node.ELEMENT_NODE) {//判断这个节点是否是有效的节点
                        // 递归调用方法 - 以遍历该节点下面所有的子节点  
                        listAllChildNodes(nodelist.item(i), level);// level表示该节点处于第几个层次(相应空格)  
                     }  
                 }
                 level--;
             }
        }
    }
}

运行结果:

技术分享

 

以上是关于Dom解析xml,只是简单的解析出有效元素的元素名,元素值,属性名和属性值的主要内容,如果未能解决你的问题,请参考以下文章

dom4j解析简单的xml文件 解析元素并封装到对象

Java:简单的解析XML文件之使用DOM解析

笔记:XML-解析文档-DOM

XML解析

使用 CSS 生成的内容(即伪元素)是不是比添加更多 DOM 元素更有效(即解析/渲染更快)?

XML —— DOM方式解析XML