码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-08-20 18:22:48      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:属性   文档   操作方法   读取   span   exception   个数   head   文件   

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,只是简单的解析出有效元素的元素名,元素值,属性名和属性值

标签:属性   文档   操作方法   读取   span   exception   个数   head   文件   

原文地址:http://www.cnblogs.com/yongguolong/p/7400380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!