我的xsd文件如下:
<xs:complexType name="baseClass">
</xs:complexType>
<xs:complexType name="childClass1">
<xs:complexContent>
<xs:extension base="baseClass">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="childClass2">
<xs:complexContent>
<xs:extension base="baseClass">
</xs:extension>
</xs:complexContent>
</xs:complexType>
有没有办法使用xpath选择childClass1,childClass2以及从baseClass扩展的所有类型,而不单独选择所有的childClass?
答案 0 :(得分:2)
可以在
中找到直接扩展baseClass
的给定模式文档中声明的所有复杂类型的集合
//xs:complexType[xs:complexContent/xs:extension[@base='baseClass']]
如果您不仅需要childClass1
和childClass2
等等,还需要扩展它们的所有类型(从而在一个或更多中扩展baseClass
但是,您将不得不将一些逻辑从XPath转移到某些宿主语言并循环遍历元素。您想要做的事情可以用以下伪代码表示:
baseClass
推入队列。$x
表示它的名字,如果它有一个,否则让$ x为空字符串。//xs:complexType[xs:complexContent/xs:extension[@base=$x]]
。将它们添加到队列和累加器中。请注意,我编写的XPath表达式将查找扩展给定命名库的所有复杂类型;如果您只想要命名的复杂类型,请将开头的//
更改为/xs:schema/
。