dom4j递归解析节点内还含有多个节点的xml

简介:介绍了dom4j的一些平常使用

dom4j的介绍:

dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。
(引用自https://baike.baidu.com/item/dom4j/828750?fr=aladdin)

这里的xml文件为(嵌套了两层,建在本地,随便放在哪个文件夹):

<xml>
    <ToUserName>ToUserName>
    <FromUserName>FromUserName>
    <CreateTime>1348831860CreateTime>
    <MsgType>MsgType>
    <Content>Content>
    <MsgId>
        <ToUserName>ToUserName>
            <MsgId>
                <ToUserName>ToUserName>
                <ToUserName>ToUserName>
            MsgId>
        <FromUserName>FromUserName>
    MsgId>
xml>

下面是main方法以及两个解析方法:

方法说明:
parseXML(Element e);这个是解析单个的,含有dom4j的基本用法。
dom4j下载:github下载链接
parseMutiXML(Element e);这个是解析含有多个节点的XML,加了一层判断,即判断节点还有没有子节点,如果没有,直接打印出来,反之重新递归使用方法,达到再解析的效果。

package xaiver.cn;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class CopyOfParseXml {
    public static void main(String[] args) throws Exception {
        // 这里直接解析xml,用到dom4j的包
        // 1.读取文件信息,三种方法读取,1创建saxdom方法,2根据跟元素内容读取,3创建dom文件读取
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File(
                "E:\\WorkSpace\\JavaSE\\Day01_HelloWorld\\src\\xmlparse.xml"));
        Element element = document.getRootElement();
        parseMutiXML(element);
    }
    @SuppressWarnings("unused")
    private static void parseXML(Element element) {
        // 得到名称测试,测试结果为xml,需要获取这个的根节点
        String name = element.getName();
        System.out.println(name);
        // 根节点再获取根节点
        @SuppressWarnings("unchecked")
        List list = element.elements();
        // 再获取根节点的List和里面的内容,用增强for循环
        for (Element e : list) {
            System.out.println(e.getName() + "==>" + e.getTextTrim());
        }
    }

    private static void parseMutiXML(Element root) {
        @SuppressWarnings("unchecked")
        List list = root.elements();
        if (list.size()==0) {
            System.out.println(root.getName()+"==>"+root.getTextTrim());
        }else {
            for (Element element:list) {
                parseMutiXML(element);
            }
        }
    }
}

执行结果:

ToUserName==>toUser
FromUserName==>fromUser
CreateTime==>1348831860
MsgType==>text
Content==>this is a test
ToUserName==>1
ToUserName==>2
ToUserName==>3
FromUserName==>4

你可能感兴趣的:(java)