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>

这里“节点”在 XSD 中递归使用。我正在尝试编写一个 XSLT 来查找 XSD 中的递归元素。

4

2 回答 2

0

以下 XPath 将查找所有具有 ref 属性的元素的元素

//xs:element[@name=//xs:element/@ref]/@name

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

//xs:element[@name=descendant-or-self::xs:element/@ref]/@name
于 2013-10-01T11:18:08.250 回答
0

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

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

于 2013-10-01T16:09:55.660 回答