在XSLT中,多个属性在for-each条件下进行比较

时间:2013-06-13 19:48:37

标签: xslt xslt-1.0

使用XSLT 1.0

是否可以过滤多个属性,我的意思如下:  “../../../../fieldmap/field[@name”即多于1个元素作为包含“field / @ name”属性的fieldmap存在并且它与定义/ @ title进行比较并且还有更多然后存在一个包含@title的定义元素。

实施例

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

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

由于

1 个答案:

答案 0 :(得分: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>

这里有一个简化的例子:

INPUT:

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

TEMPLATE:

<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>

我希望这有帮助!