如何解析XML模式并获取属性名称

时间:2015-11-06 05:50:35

标签: java xml

我想解析XML模式,然后从模式中获取元素,如果有复杂的对象,则应该使用前缀作为主要复杂类型来获取属性。  例如

  <xs:element name="address" >
        <xs:complexType>
            <xs:sequence>
                <xs:element name="city" type="xs:string"/>
                <xs:element name="street" type="xs:string"/>
                <xs:element name="zipcode" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

地址是复杂的类型,如果我们想要获取邮政编码,那么它应该像地址.zipcode&#39; 有没有办法做到这一点,或者我们必须手动检查类型和创建字段。

下面是XML架构。

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="Employee">
 <xs:complexType>
    <xs:sequence>
        <xs:element name="empId" type="xs:integer"/>
        <xs:element name="firstName" type="xs:string"/>
        <xs:element name="lastName" type="xs:string"/>
        <xs:element name="title" type="xs:string"/>
        <xs:element name="address" >
        <xs:complexType>
            <xs:sequence>
                <xs:element name="city" type="xs:string"/>
                <xs:element name="street" type="xs:string"/>
                <xs:element name="zipcode" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    </xs:sequence>
</xs:complexType>

    

1 个答案:

答案 0 :(得分:0)

从原始模式文档中提取信息具有挑战性,除非您知道模式将被限制为使用该语言的子集:例如,它不会使用命名模型组,替换组或扩展派生的复杂类型

很容易编写适用于您的示例的内容(例如在XSLT中) - 或者至少,如果我们能够更清楚地了解您想要的输出,那么这将很容易 - 但是编写可以处理任何模式的内容会更加容易困难的。

使用“真实”模式处理器生成的模式的编译表示可能更好。例如,Xerces有一个API,允许访问由模式编译器生成的“模式组件”,Saxon可以选择生成一个SCM文件(模式组件模型),它是一个包含相同信息的XML文件;在这个级别,您不必处理可能已编写源模式的各种方式。