可变$rows
具有节点的列表ID的钥匙插入一些源XML。XSLT测试任何键入的节点是否存在
<row>
<node id="d0113" />
<node id="d0237" />
<node id="d0321" />
</row>
<row>
<node id="c0278" />
<node id="d0137" />
<node id="e0021" />
</row>
什么是处理每个<row>
之前测试的好方法,是否有任何键节点的实际存在的节点集合$set
?
所有我想出来的是
<xsl:for-each select="row">
<xsl:variable name="test">
<xsl:for-each select="node">
<xsl:value-of select="boolean($set//*[generate-id()=current()/@id]) * 1"/>
</xsl:for-each>
</xsl:variable>
<xsl:if test="$test>0">
<!-- go ahead and process the row -->
</xsl:if>
</xsl:for-each>
我简化了误导。该变量正在同一个运行中创建。所以id值保证是一样的。我可以安全地使用generate-id。但即使使用静态密钥,问题也是一样的:如何快速确定节点集是否至少包含一个节点,其ID在某个列表中出现。 (理想情况下,搜索甚至会停止,一旦发现,我的方法会进行全面扫描。) – JPM 2012-07-15 04:24:01
@JPM:查看我的答案的更新。这可以在单个XPath表达式中确定,不需要'xsl:for-each'。 – 2012-07-15 04:55:42
啊,是的!由于如何=与节点集一起工作。谢谢Dimitre。 +1,Q回答。 – JPM 2012-07-15 05:07:34