天天看点

jaxb 使用 之 marshal

先看 xml schema 约束

post.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="post" type="postType" />

<xs:complexType name="postType">

<xs:sequence maxOccurs="unbounded">

<xs:element name="id" type="xs:long" minOccurs="0"></xs:element>

<xs:element name="tiebaName" type="xs:string" minOccurs="0"></xs:element>

<xs:element name="url" type="xs:string" minOccurs="0"></xs:element>

<xs:element name="title" type="xs:string" minOccurs="0"></xs:element>

<xs:element name="author" type="xs:string" minOccurs="0"></xs:element>

</xs:sequence>

</xs:complexType>

</xs:schema>

然后

static String path = PostMarshall.class.getClassLoader().getResource("com/jaxb/tieba/").getPath();

path = URLDecoder.decode(path, "utf-8");

JAXBContext factory = JAXBContext.newInstance(Post.class);

Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(new File(path,"post.xsd"));

Marshaller ms = factory.createMarshaller();

Post post = new Post();

post.setAuthor("taoge");

//设置schema,验证合法性

ms.setSchema(schema);

ms.marshal(post, new File(path + "post.xml"));

System.out.println(post.getAuthor());

运行java程序

生成的xml如下

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><post><author>taoge</author><id>0</id></post>

创建的 post 对象其 id == 0

所以会出现上述结果