我想解析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>
答案 0 :(得分:0)
从原始模式文档中提取信息具有挑战性,除非您知道模式将被限制为使用该语言的子集:例如,它不会使用命名模型组,替换组或扩展派生的复杂类型
很容易编写适用于您的示例的内容(例如在XSLT中) - 或者至少,如果我们能够更清楚地了解您想要的输出,那么这将很容易 - 但是编写可以处理任何模式的内容会更加容易困难的。
使用“真实”模式处理器生成的模式的编译表示可能更好。例如,Xerces有一个API,允许访问由模式编译器生成的“模式组件”,Saxon可以选择生成一个SCM文件(模式组件模型),它是一个包含相同信息的XML文件;在这个级别,您不必处理可能已编写源模式的各种方式。