1

使用 XSLT 1.0

是否可以过滤多对多属性,我的意思是如下示例:“../../../../fieldmap/field[@name” 即超过 1 个元素作为包含“field/@name”的字段映射属性存在并且它与定义/@title 进行比较,并且存在不止一个包含@title 的定义元素。

例子:

<xsl:for-each select="../../../../fieldmaps/field[@name=../destination/@title]">

您能否建议我如何实现 - 如果包含@name 的字段存在于任何定义/@title 中,那么只有那些记录应该在 for-each 循环中处理?(现在看起来,它只会与第一个 @title 属性进行比较并考虑所有 fieldmaps/field/@name 属性)

谢谢

4

1 回答 1

2

您可以使用变量来实现:

<xsl:variable name="titles" select="../destination/@title"/>
<!--now "titles" contains a nodeset with all the titles -->
<xsl:for-each select="../../../../fieldmaps/field[@name=$titles]">
<!-- you process each field with a name contained inside the titles nodeset -->
</xsl:for-each>

这里有一个简化的例子:

输入:

<parent>
    <fieldmaps>
        <field name="One"/>
        <field name="Two"/>
        <field name="Three"/>
    </fieldmaps>
    <destinations>
        <destination title="One"/>
        <destination title="Two"/>
    </destinations>
</parent>

模板:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- ++++++++++++++++++++++++++++++++ -->
    <xsl:template match="parent">
        <Results>
            <xsl:variable name="titles" select="destinations/destination/@title"/>
            <xsl:for-each select="fieldmaps/field[@name=$titles]">
                <Result title="{@name}"/>
            </xsl:for-each>
        </Results>
    </xsl:template>
    <!-- ++++++++++++++++++++++++++++++++ -->
</xsl:stylesheet>

输出:

<Results>
    <Result title="One"/>
    <Result title="Two"/>
</Results>

我希望这有帮助!

于 2013-06-20T11:41:47.930 回答