我试图使用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中查找递归元素。
答案 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。