【问题标题】:Finding Recursion in XSD using XSLT使用 XSLT 在 XSD 中查找递归
【发布时间】:2013-10-07 12:03:50
【问题描述】:

我正在尝试使用 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 中的递归元素。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-03-23
        • 2017-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        相关资源
        最近更新 更多