项目开发中,经常要用到生成XML和解析XML,其实JDK已经为我们写好了一些处理XML的类,就在javax.xml这个包下面,具体怎么用的呢?
我们今天先来看看JAXB如何快速简单的解析XML。
首先我们需要定义XML的格式,JAXB可以通过xsd文件来定义对应的XML,如我做了一个异常处理类,配置如下
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"xmlns:tns="http://www.kedou.com/exceptionProcessers/"
targetNamespace="http://www.kedou.com/exceptionProcessers/">
<element name="exceptionProcessers">
<complexType>
<sequence>
<element ref="tns:excludes" minOccurs="0" maxOccurs="1"></element>
<element ref="tns:processer" minOccurs="0" maxOccurs="unbounded"></element>
</sequence>
</complexType>
</element>
<element name="excludes">
<complexType>
<sequence>
<element ref="tns:pattern" minOccurs="1" maxOccurs="unbounded"></element>
</sequence>
</complexType>
</element>
<element name="pattern" type="string">
</element>
<element name="processer">
<complexType>
<sequence>
<element ref="tns:pattern" minOccurs="1" maxOccurs="unbounded"></element>
</sequence>
<attribute name="id" type="string" use="required"></attribute>
<attribute name="beanName" type="string"></attribute>
<attribute name="className" type="string"></attribute>
</complexType>
</element>
</schema>
具体的细节就不用说了吧?大家应该一看就明白的
然后是生成对应的bean对象,因为JAXB本来就是将xml直接转化为对象,然后我们就可以直接得到XML中的数据了。JDK为我们提供了一种很简单的生成bean方法,打开dos窗口,输入命令
在命令行下执行:
Xjc –d java类的存放路径 –p 类的包名 xsd文件名
对应就可以生成对应的Java对象
使用的时候就更简单了,直接调用静态类即可获取!
代码如下:
private static ExceptionProcessers processersRoot;
static{
JAXBContext context;
try {
context = JAXBContext.newInstance(ExceptionProcessers.class);
Unmarshaller shaller = context.createUnmarshaller();
processersRoot = (ExceptionProcessers) shaller.unmarshal(newFile(getClassPath()+"exceprionProcessers.xml"));
} catch (JAXBException e) {
e.printStackTrace();
}
}
是不是很简单的呢?还不赶快来试试……
附表:JAXB中XML数据类型和Java数据类型的映射
XML Schema类型 | Java数据类型 |
xsd:string | java.lang.String |
xsd:positiveInteger | java.math.BigInteger |
xsd:int | int |
xsd:long | long |
xsd:short | short |
xsd:decimal | java.math.BigDecimal |
xsd:float | float |
xsd:double | double |
xsd:boolean | boolean |
xsd:byte | byte |
xsd:QName | javax.xml.namespace.QName |
xsd:dateTime | javax.xml.datatype.XMLGregorianCalendar |
xsd:base64Binary | byte[] |
xsd:hexBinary | byte[] |
xsd:unsignedInt | long |
xsd:unsignedShort | int |
xsd:unsignedByte | short |
xsd:time | javax.xml.datatype.XMLGregorianCalendar |
xsd:date | javax.xml.datatype.XMLGregorianCalendar |
xsd:g | javax.xml.datatype.XMLGregorianCalendar |
xsd:anySimpleType | java.lang.Object |
xsd:anySimpleType | java.lang.String |
xsd:duration | javax.xml.datatype.Duration |
xsd:NOTATION | javax.xml.namespace.QName |