• JAVA解析XML文件


         XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),具体可参阅w3c官方网站文档http://www.w3.org获取更多信息。

    XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML的内容和结构如下: 

    <?xml version="1.0" encoding="UTF-8"?>
    <employees>
    
        <employee name="zansan">
            <age>30</age>
        </employee>
        
        <employee name="lisi">
            <age>20</age>
        </employee>
        
        <employee name="wangwu">
            <age>25</age>
        </employee>
        
    </employees>

    DOM生成和解析XML文档

    为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

    代码:

     1 import java.io.IOException;
     2 import java.io.InputStream;
     3 
     4 import javax.xml.parsers.DocumentBuilder;
     5 import javax.xml.parsers.DocumentBuilderFactory;
     6 import javax.xml.parsers.ParserConfigurationException;
     7 
     8 import org.w3c.dom.Document;
     9 import org.w3c.dom.Element;
    10 import org.w3c.dom.Node;
    11 import org.w3c.dom.NodeList;
    12 import org.xml.sax.SAXException;
    13 
    14 public class TestXmlDom {
    15     public static void main(String[] args) {
    16         try {
    17             //1 创建解析器工厂对象
    18             DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    19             //2 由解析器工厂对象创建解析器对象
    20             DocumentBuilder db = dbf.newDocumentBuilder();
    21             //得到xml文件的文件流
    22             InputStream is=TestXmlDom.class.getResourceAsStream("test.xml");
    23             //3 由解析器对象对指定XML文件进行解析,构建相应DOM树,创建Document对象
    24             Document doc=db.parse(is);
    25             is.close();
    26             //获得employee节点集合
    27             NodeList nodeList=doc.getElementsByTagName("employee");
    28             
    29             //得到employee节点的属性
    30             for(int i=0;i<nodeList.getLength();i++){
    31                 Element e=(Element)nodeList.item(i);
    32                 String attribute = e.getAttribute("name");
    33                 System.out.println(attribute);
    34             }
    35             
    36             //得到age节点的值
    37             for(int i=0;i<nodeList.getLength();i++){
    38                 Node employeeNode=nodeList.item(i);
    39                 //得到age节点
    40                 Node ageNode=employeeNode.getFirstChild().getNextSibling();
    41                 System.out.println(ageNode.getFirstChild().getNodeValue());
    42             }
    43             
    44         } catch (ParserConfigurationException e) {
    45             e.printStackTrace();
    46         } catch (SAXException e) {
    47             e.printStackTrace();
    48         } catch (IOException e) {
    49             e.printStackTrace();
    50         }
    51     }
    52 }

    DOM4J生成和解析XML文档

    DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

    要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/

    dom4j官方网站就是址蛋,找半天找不包下载地址,可以下面地址下载:http://sourceforge.net/projects/dom4j/

    下载解开后把dom4j-1.6.1.jar加入工程就可以了.

    代码:

     1 import java.io.InputStream;
     2 import java.util.List;
     3 
     4 import org.dom4j.Document;
     5 import org.dom4j.DocumentException;
     6 import org.dom4j.Element;
     7 import org.dom4j.io.SAXReader;
     8 
     9 
    10 public class TestXmlDom4J {
    11     public static void main(String[] args) {
    12         try {
    13             //创建SAXReader对象
    14             SAXReader reader=new SAXReader();
    15             //得到XML文件的文件流
    16             InputStream in=TestXmlDom4J.class.getResourceAsStream("test.xml");
    17             //注意:Document对象是org.dom4j包下的Document.通过SAXReader对象的read(InputStream)方法得到Document对象
    18             Document document=reader.read(in);
    19             //获得根元素.注意:Element是org.dom4j包下的Element
    20             Element root=document.getRootElement();
    21             //获得employee元素集合
    22             List<Element> employeeElements=root.elements("employee");
    23             //遍历employeeElements得到属性name的值
    24             for(Element e:employeeElements){
    25                 String name=e.attributeValue("name");
    26                 System.out.println(name);
    27             }
    28             //遍历employeeElements得到age元素的值
    29             for(Element e:employeeElements){
    30                 //得到age元素
    31                 Element a=e.element("age");
    32                 //得到age元素的值
    33                 String age=a.getText();
    34                 System.out.println(age);
    35             }
    36         } catch (DocumentException e) {
    37             // TODO Auto-generated catch block
    38             e.printStackTrace();
    39         }
    40     }
    41 }
  • 相关阅读:
    Spring之Redis访问(Spring-data-redis)
    SpringCloud之Hystrix容错保护原理及配置
    SpringCloud之Feign声明式调用原理及配置
    SpringCloud之Ribbon负载均衡配置
    基于Zookeeper实现分布式锁
    SpringCloud之Eureka注册中心原理及其搭建
    SpringBoot定时任务(schedule、quartz)
    Java和操作系统交互(Java 代码是怎么执行)(转)
    深入SpringBoot注解原理及使用
    Spring事务的配置、参数详情及其原理介绍(Transactional)
  • 原文地址:https://www.cnblogs.com/likailan/p/3275362.html
Copyright © 2020-2023  润新知