dom4j读取xml文件获取所有标签

dom4j读取xml文件获取所有标签_第1张图片
(图片引用传智教育)

其实读取所有节点不易理解的地方就是Element (标签节点)和Node(节点)为什么要转来转去

1 . 首先是getRootElement方法,这个方法返回的是一个标签节点 ,标签节点可以调用nodeIterator()函数,返回一个迭代器
2 . 这时候用迭代器迭代出来的全部是Node节点,因为并不是所有的node节点都有子节点对象,所以并不能直接用Node节点来调用nodeIterator()函数
3 . 进行判断这个Node节点是不是Element节点(标签节点)
4 . 如果这个Node节点是标签节点,强转为Element节点(标签节点),然后在调用nodeIterator()函数
5 . 这样就可以把所有的节点信息全部读出

Demo2.java

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.util.Iterator;

/**
 * Created by LiJing on 2017/8/27.
 */
public class Demo1 {
    public static void main(String[] args) throws DocumentException {
        //获取dom对象
        SAXReader reader = new SAXReader();
        Document document = reader.read(".//src//contact.xml");
        //获取根节点
        Element element = document.getRootElement();
        getChildNodes(element);
    }
    public static void getChildNodes(Element element){
        System.out.println(element.getName());
        Iterator it = element.nodeIterator();
        while(it.hasNext()){
            Node node = it.next();
            //只有标签节点才有子节点 所以判断这个节点是否是标签节点
            if(node instanceof Element){
                Element element1 = (Element)node;
                getChildNodes(element1);
            }
        }

    }
}

contact.xml


<contactList>
    <contact id="001">
        <name>张三name>
        <age>20age>
        <phone>134222223333phone>
        <email>[email protected]email>
        <qq>432221111qq>
    contact>
    <contact id="002">
        <name>李四name>
        <age>20age>
        <phone>134222225555phone>
        <email>[email protected]email>
        <qq>432222222qq>
    contact>
contactList>

你可能感兴趣的:(dom4j读取xml文件获取所有标签)