• 使用JAXB解析xml文件(一)


     

    1.java中解析xml的几种方式

    1.1 JDK原生dom形式 原理:一次性把xml读入内存,在内存中构建成树形结构。优点:对节点操作方便,缺点:需要大量的内存空间,浪费资源

    1.2 SAX形式 原理:基于事件形式,当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:相对于dom形式更快捷,占用资源少。缺点:没有持久话。事件过后,若没保存数据,那么数据就丢了。

    1.3 DOM4J 它是一个开源的框架,具有性能优异、功能强大和极端易用使用的特点。

    1.4 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。

    2.JAXB的几个核心对象

    2.1 JAXBContext Jaxb的上下文,通过这个对象我们能拿到另外两个核心对象Unmarshaller(用于解析xml)和Marshaller(生成xml)

    2.2 JAXBContext通常使用它的静态方法newInstance(Class className)来获得对象

    2.3 Unmarshaller用于解析xml 通过JAXBContext的createUnmarshaller方法获得到

    2.4 Marshaller用于生成xml 通过JAXBContext的createMarshaller方法获得到

    3.示例代码

    3.1 实体类Bean与Property 

     1 package org.lyrk.accp8.s2.chapter.xml;
     2 
     3 import javax.xml.bind.annotation.*;
     4 
     5 /**
     6  * Created by niechen on 17/5/9.
     7  */
     8 @XmlRootElement
     9 @XmlAccessorType(XmlAccessType.FIELD)
    10 public class Bean {
    11 
    12     @XmlElement
    13     private Property property;
    14 
    15     public Property getProperty() {
    16         return property;
    17     }
    18 
    19     public void setProperty(Property property) {
    20         this.property = property;
    21     }
    22 }
    23 
    24 @XmlAccessorType(value = XmlAccessType.FIELD)
    25 class Property {
    26     @XmlAttribute(name = "id")
    27     private String id;
    28 
    29     @XmlAttribute(name = "value")
    30     private String value;
    31 
    32     public String getId() {
    33         return id;
    34     }
    35 
    36     public void setId(String id) {
    37         this.id = id;
    38     }
    39 
    40     public String getValue() {
    41         return value;
    42     }
    43 
    44     public void setValue(String value) {
    45         this.value = value;
    46     }
    47 }

    3.2 主函数类

     1 package org.lyrk.accp8.s2.chapter.xml;
     2 
     3 import javax.xml.bind.JAXBContext;
     4 import javax.xml.bind.JAXBException;
     5 import javax.xml.bind.Unmarshaller;
     6 import java.io.InputStream;
     7 
     8 /**
     9  * Created by niechen on 17/5/9.
    10  */
    11 public class Test {
    12 
    13     public static void main(String[] args) {
    14         try {
    15             JAXBContext jaxbContext = JAXBContext.newInstance(Bean.class);//创建JAXBContext对象,注意一定要传@XmlRootElement的所标记的类的类型
    16             Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();//拿到xml解析对象
    17             InputStream inputStream = Bean.class.getClassLoader().getResourceAsStream("bean.xml");//在classpath下读取xml的文件流
    18             Bean bean = (Bean) unmarshaller.unmarshal(inputStream);//将xml转换成实体对象
    19             System.out.println(bean.getProperty().getId());//输出ID属性
    20             System.out.println(bean.getProperty().getValue());//输出value属性
    21         } catch (JAXBException e) {
    22             e.printStackTrace();
    23         }
    24     }
    25 }

    3.3 xml文件内容

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <bean>
    3     <property id="name" value="10" />
    4 </bean>
  • 相关阅读:
    Gecko SDK (XULRunner SDK)最新版
    北京联通机顶盒-中兴B860A破解
    litepdf简单的PDF操作库
    BZOJ1925 [SDOI2010]地精部落
    BZOJ 最大公约数 (通俗易懂&效率高&欧拉函数)
    Tarjan无向图的割点和桥(割边)全网详解&算法笔记&通俗易懂
    最近公共祖先综合算法笔记
    严格次小生成树[BJWC2010]
    NOIP2016 Day1 T2 天天爱跑步(树上差分,LCA)
    树上差分算法笔记
  • 原文地址:https://www.cnblogs.com/niechen/p/6829499.html
Copyright © 2020-2023  润新知