如何使用xsd架构创建有效的xml

时间:2014-02-24 19:26:16

标签: java xml xsd

我想将以下定义的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>

1 个答案:

答案 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>