使用XSLT 1.0
是否可以过滤多对多属性,我的意思是如下例所示:"../../../../fieldmap/field[@name"即存在多于1个包含"field/@name"属性的fieldmap元素,并且它与定义/@title进行比较,并且存在多于一个包含@title的定义元素
的例子:
<xsl:for-each select="../../../../fieldmaps/field[@name=../destination/@title]">
你能告诉我如何可能实现-如果字段包含@name存在于任何定义/@title,那么只有这些记录应该在for-each循环中处理?(现在看起来,它只会比较第一个@title属性,并考虑所有fieldmaps/field/@name属性)
谢谢
您可以使用一个变量:
<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>
我希望这对你有帮助!