使用Xpath选择从xsd中的基类扩展的所有节点



我的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和从基类扩展的所有类型,而不单独选择所有的childClass?

在给定的模式文档中声明的所有复杂类型的集合,这些类型直接扩展了baseClass,可以使用找到

//xs:complexType[xs:complexContent/xs:extension[@base='baseClass']]

但是,如果您不仅需要childClass1childClass2等等,还需要扩展它们的所有类型(从而在一个或多个步骤中扩展baseClass),那么您将不得不将一些逻辑从XPath转移到一些宿主语言中,并在元素上循环。您想要做的事情可以用以下伪代码表示:

  1. 从一个空队列和一个空累加器开始
  2. baseClass推送到队列中
  3. 如果队列为空,则所需的类型集在累加器中。停下
  4. (如果达到此步骤,则队列不是空的。)从队列中删除第一个项目;如果它有名称,则让$x表示它的名称,否则让$x为空字符串
  5. 查找集合//xs:complexType[xs:complexContent/xs:extension[@base=$x]]。将它们同时添加到队列和累加器中
  6. 转到步骤3

注意,我编写的XPath表达式将找到所有扩展给定命名基的复杂类型;如果只需要命名的复杂类型,请将开头的//更改为/xs:schema/

最新更新