【问题标题】:Use XML schema groups in XSL transformation在 XSL 转换中使用 XML 模式组
【发布时间】:2011-11-30 13:14:22
【问题描述】:

我在 XML 模式中有组定义。像这样:

<attributeGroup name="my_attributes">
    <attribute ref="ns:foo" />
    <attribute ref="ns:bar" />
</attributeGroup>

另外,我有一个 XML 转换,我希望能够在其中重用这些定义。是否可以创建与此类组匹配的模板?可能是这样的:

<xsl:template matchGroup="my_attributes">
    <foobar>
        <xsl:copy-of select="@*"/>
        <xsl:value-of select="." />
    </foobar>
</xsl:template>

【问题讨论】:

    标签: xslt xsd


    【解决方案1】:

    是否可以创建与此类组匹配的模板? 可能是这样的:

    <xsl:template matchGroup="my_attributes"> 
        <foobar> 
            <xsl:copy-of select="@*"/> 
            <xsl:value-of select="." /> 
        </foobar> 
    </xsl:template>
    

    不,XSLT &lt;xsl:template&gt; 指令没有 matchGroup 属性并且 因此,任何兼容的 XSLT 处理器都必须引发语法错误

    这样的东西可能与您正在寻找的东西很接近:

    <xsl:template match="@ns:foo[../@ns:bar]">
     <!-- Processing here -->
    </xsl:template>
    

    上面匹配模式的含义

    匹配任何属性与 local-name() foo 在与前缀 "ns:" 关联的命名空间中,并且其 “父”(此属性所附加到的元素) *还有另一个名为* ns:bar 的属性。

    【讨论】:

    • @ns:foo[../@ns:bar] 到底是什么意思?
    • @Alp:我用您要求的解释更新了答案。
    • 感谢您的解释,但这不是我故意需要的。 XSD 中的 attributeGroup 意味着允许任何属性,它们不必一次全部出现(忽略父级)。
    • 我会将您的答案标记为解决方案,因为您告诉我,如果不硬编码每个属性名称(或使用命名空间),我的想法是不可能实现的。
    • @Alp:不客气。至于误解,这种情况经常发生——如果你是一个领域的专家,但在另一个领域寻求帮助,不要指望另一个领域的专家知道你专业领域的任何东西 .我想知道您对虚构属性 matchGroup 的期望是什么语义。你期望它做什么?
    猜你喜欢
    • 2017-04-16
    • 2012-04-01
    • 2012-08-12
    • 1970-01-01
    • 2012-02-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多