我想将以下定义的xml架构查看到我期望的xml中。任何人都可以帮助我在XSD中写什么。提前致谢。 XML SCHEMA:
<xs:element name="Animal">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
XML中的预期输出:<Animal type="carnivore">Tiger</Animal>
。
答案 0 :(得分:0)
使用仅包含您显示的元素的模式,您可以使用JAXB在Java中生成所需的实例。我在你的例子中添加了一些上下文,并包含了一个名称空间这是完整的XML Schema文件(我称之为animals.xsd
):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://animals"
targetNamespace="http://animals"
elementFormDefault="qualified">
<xs:element name="Animal">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
使用xjc
工具(XSD到Java编译器),您可以从XML Schema生成类。所以你可以简单地运行:
xjc animals.xsd
它会生成这些文件
animals/Animal.java
animals/ObjectFactory.java
animals/package-info.java
将它们放在类路径中。现在您可以编写一个简单的程序,您可以使用该类创建实例,然后使用JAXB marshaller将其序列化为XML:
import animals.Animal;
import javax.xml.bind.*;
public class App {
public static void main(String[] args) throws JAXBException {
Animal tiger = new Animal();
tiger.setType("carnivore");
tiger.setValue("Tiger");
JAXBContext jaxbContext = JAXBContext.newInstance(Animal.class);
Marshaller m = jaxbContext.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(tiger, System.out);
}
}
结果将打印到控制台:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Animal xmlns="http://animals" type="carnivore">Tiger</Animal>