Fork me on GitHub

java中解析XML

xml文件一般有三种用途,1. 可以用来保存数据,2. 可以用来做配置文件,3. 数据传输载体,本篇文章主要记载java中如何解析XML文件。

XML解析方式

XML文件的定义以及标签的用法就不多说了,XML文件的约束主要有两种(DTD和Schema),现在最常见的XML的解析方式主要有两种,一个是DOM, 一个是SAX;两者区别如下

  • DOM方法是将XML文件读取到内存中去生成树状结构(对象),这样的话如果文件过大就可能会出现内存溢出;
  • SAX(simple api for xml)方法则是事件驱动模式,读取一行解析一行;

针对这两种解析方式,市场上出现了很多的解决方案比如dom4j,jaxp,jdom等

Dom4j使用

  • 首先需要用到Dom4j的jar包;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    try {
    //1. 创建sax读取对象
    SAXReader reader = new SAXReader(); //jdbc -- classloader
    //2. 指定解析的xml源
    Document document = reader.read(new File("src/xml/stus.xml"));

    //3. 得到元素、
    //得到根元素
    Element rootElement= document.getRootElement();

    //获取根元素下面的子元素 age
    //rootElement.element("age")
    //System.out.println(rootElement.element("stu").element("age").getText());

    //获取根元素下面的所有子元素 。 stu元素
    List<Element> elements = rootElement.elements();
    //遍历所有的stu元素
    for (Element element : elements) {
    //获取stu元素下面的name元素
    String name = element.element("name").getText();
    String age = element.element("age").getText();
    String address = element.element("address").getText();
    System.out.println("name="+name+"==age+"+age+"==address="+address);
    }

    } catch (Exception e) {
    e.printStackTrace();
    }
  • 如果XML层级过深,我们可以使用Dom4j中的Xpath,xpath其实是xml的路径语言,支持我们在解析xml的时候,能够快速的定位到具体的某一个元素,当然我们还是需要添加jar包;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Element nameElement = (Element) rootElement.selectSingleNode("//name");
    System.out.println(nameElement.getText());

    System.out.println("----------------");

    //获取文档里面的所有name元素
    List<Element> list = rootElement.selectNodes("//name");
    for (Element element : list) {
    System.out.println(element.getText());
    }
-------------本文结束感谢您的阅读-------------

本文标题:java中解析XML

文章作者:陈晓拉尼

发布时间:2019年07月24日 - 13:07

最后更新:2019年07月24日 - 16:07

原始链接:http://yoursite.com/archives/59186.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。