在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding)。
利用这个工具很方便生成XML的tag和Java类的对应关系。参照网上的资料,简单说明一下java操作xml的一些东西。
1.先定义一个XML Schema文件。比如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="person">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="age" type="xs:int"/>
</xs:complexType>
</xs:element>
</xs:schema>
相关XML Schema的定义规则可以参考 http://www.w3.org/TR/xmlschema-2/
2.生成java类。
在命令行中执行
C:\jaxb>xjc person.xsd
这样就生成了Persion类。
package com.test.xml
public class Person {
protected String name;
protected Integer age;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public Integer getAge() {
return age;
}
public void setAge(Integer value) {
this.age = value;
}
}
tag的类型和java的类型的对应关系。
XML Schema Type | Java Data Type |
---|---|
xsd:string | java.lang.String |
xsd:integer | 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 |
3. 读取xml的内容到java对象。
java读取xml的内容的例子。
public class UnmarshallerUtil {
public UnmarshallerUtil () {
try {
// 1. 生成JAXBContex对象
JAXBContext context = JAXBContext.newInstance("com.test.xml");
// 2. 生成Unmarsaller对象
Unmarshaller unmarshaller = context.createUnmarshaller();
File file = new File("artists.xml");
// 3. Unmarsaller
Object obj = unmarshaller.unmarshal(file);
Persons artists = (Persons)obj;
//其他处理
} catch (JAXBException ex) {
}
}
public static void main(String[] args) {
new UnmarshallerUtil();
}
}