可變$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