使用XSLT在XSD中查找递归

时间:2013-10-01 10:52:24

标签: xml xslt xml-parsing xsd xslt-1.0

我试图使用XSLT在XSD中找到递归。任何人都可以建议任何技术吗?

实施例

<xs:element name="nodes">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="node" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="node">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="node" maxOccurs="unbounded"/>
        <xs:element name="text" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

这里&#34;节点&#34;在XSD中递归使用。我正在尝试编写一个XSLT来在XSD中查找递归元素。

2 个答案:

答案 0 :(得分:0)

以下XPath将找到所有具有ref属性

元素的元素
//xs:element[@name=//xs:element/@ref]/@name

下一个XPath将找到包含具有ref属性的相同元素的子元素的元素:

//xs:element[@name=descendant-or-self::xs:element/@ref]/@name

答案 1 :(得分:0)

如果你想找到实现递归的所有可能方法,那就非常困难,例如:通过任意数量的中介进行递归,并通过导入的模式文档中的命名模型组进行递归。它相当于在XSLT中编写XML模式文档处理器(即将模式的XML表示转换为内部模式组件表示的那个)。

最好让别人为你构建架构组件模型,然后解决这个问题。 Saxon提供了模式组件模型(SCM)的XML表示,Xalan为其提供了Java API。