我写了一个库来从XSD生成SimpleXML Java注释类。
这是链接:https://github.com/yeshodhan/android-jaxb
例如:
XML 架构
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://person.mickoo.com/"
targetNamespace="http://person.mickoo.com/" elementFormDefault="qualified">
<xsd:element name="Person" type="Person"/>
<xsd:complexType name="Person">
<xsd:sequence>
<xsd:element name="FirstName" type="xsd:string" minOccurs="0" />
<xsd:element name="LastName" type="xsd:string" minOccurs="0" />
<xsd:element name="Adult" type="xsd:boolean" minOccurs="0" />
<xsd:element name="Addresses" type="Addresses" minOccurs="0" />
<xsd:element name="Gender" type="Gender" minOccurs="0" />
<xsd:element name="Favorite_Fruits" type="Fruits" minOccurs="0" maxOccurs="3"/>
<xsd:element name="SomeThing_really_whacky-by-the-user" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="Addresses">
<xsd:sequence>
<xsd:element name="Address" type="Address" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Address">
<xsd:sequence>
<xsd:element name="Line1" type="xsd:string" minOccurs="0" />
<xsd:element name="Line2" type="xsd:string" minOccurs="0" />
<xsd:element name="City" type="xsd:string" minOccurs="0" />
<xsd:element name="State" type="xsd:string" minOccurs="0" />
<xsd:element name="Country" type="xsd:string" minOccurs="1" />
<xsd:element name="PostalCode" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="Gender">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="MALE"/>
<xsd:enumeration value="FEMALE"/>
<xsd:enumeration value="NOT_SPECIFIED"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Fruits">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Apple"/>
<xsd:enumeration value="Banana"/>
<xsd:enumeration value="Mango"/>
<xsd:enumeration value="Orange"/>
<xsd:enumeration value="Grapes"/>
<xsd:enumeration value="Watermelon"/>
<xsd:enumeration value="Peach"/>
<xsd:enumeration value="Apricot"/>
<xsd:enumeration value="Grapefruit"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
生成的 Java 类
package com.mickoo.person;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;
@Root(name = "Address")
@Namespace(reference = "http://person.mickoo.com/")
public class Address {
@Element(name = "Line1", required = false)
private String line1;
@Element(name = "Line2", required = false)
private String line2;
@Element(name = "City", required = false)
private String city;
@Element(name = "State", required = false)
private String state;
@Element(name = "Country", required = true)
private String country;
@Element(name = "PostalCode", required = false)
private String postalCode;
public Address() {
}
public String getLine1() {
return line1;
}
public void setLine1(String line1) {
this.line1 = line1;
}
public String getLine2() {
return line2;
}
public void setLine2(String line2) {
this.line2 = line2;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
}
package com.mickoo.person;
import java.util.List;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;
@Root(name = "Addresses")
@Namespace(reference = "http://person.mickoo.com/")
public class Addresses {
@ElementList(name = "Address", entry = "Address", inline = true, required = false)
private List<Address> address;
public Addresses() {
}
public List<Address> getAddress() {
return address;
}
public void setAddress(List<Address> address) {
this.address = address;
}
}
package com.mickoo.person;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;
@Root(name = "Fruits")
@Namespace(reference = "http://person.mickoo.com/")
public enum Fruits {
Apple,
Banana,
Mango,
Orange,
Grapes,
Watermelon,
Peach,
Apricot,
Grapefruit;
}
package com.mickoo.person;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;
@Root(name = "Gender")
@Namespace(reference = "http://person.mickoo.com/")
public enum GenderEnum {
MALE(0, "Men are from Mars"),
FEMALE(1, "Women are from Venus"),
NOT_SPECIFIED(2, "Can't say anything");
private final Integer id;
private final String description;
private GenderEnum(Integer id, String description) {
this.id = id;
this.description = description;
}
public Integer id() {
return id;
}
public String description() {
return description;
}
}
package com.mickoo.person;
import java.util.List;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;
@Root(name = "Person")
@Namespace(reference = "http://person.mickoo.com/")
public class Person {
@Element(name = "FirstName", required = false)
private String firstName;
@Element(name = "LastName", required = false)
private String lastName;
@Element(name = "Adult", required = false)
private Boolean adult;
@Element(name = "Addresses", required = false)
private Addresses addresses;
@Element(name = "Gender", required = false)
private GenderEnum gender;
@ElementList(name = "Favorite_Fruits", entry = "Favorite_Fruits", inline = true, required = false)
private List<Fruits> favoriteFruits;
@Element(name = "SomeThing_really_whacky-by-the-user", required = false)
private String someThingReallyWhackyByTheUser;
@Attribute(name = "id", required = false)
private String id;
public Person() {
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Boolean getAdult() {
return adult;
}
public void setAdult(Boolean adult) {
this.adult = adult;
}
public Addresses getAddresses() {
return addresses;
}
public void setAddresses(Addresses addresses) {
this.addresses = addresses;
}
public GenderEnum getGender() {
return gender;
}
public void setGender(GenderEnum gender) {
this.gender = gender;
}
public List<Fruits> getFavoriteFruits() {
return favoriteFruits;
}
public void setFavoriteFruits(List<Fruits> favoriteFruits) {
this.favoriteFruits = favoriteFruits;
}
public String getSomeThingReallyWhackyByTheUser() {
return someThingReallyWhackyByTheUser;
}
public void setSomeThingReallyWhackyByTheUser(String someThingReallyWhackyByTheUser) {
this.someThingReallyWhackyByTheUser = someThingReallyWhackyByTheUser;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
用法
➜ target git:(master) ✗ java -jar android-jaxb-1.0.jar --help
usage: java -jar android-jaxb-1.0.jar [options] your-schema-file.xsd
---------------------------------------------------------------------
-b,--bindings <arg> (optional) bindings JSON file
-d,--destination <arg> destination directory for generated classes
-h,--help Help on usage
-p,--package <arg> package name for generated classes. Eg.:
com.example.app
-v,--version Version
---------------------------------------------------------------------