使用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属性)
由于
答案 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>
我希望这有帮助!