如何选择没有属性但在XML中具有特定值的节点

时间:2012-07-07 07:54:57

标签: xml

我已经从XML文件的一部分在变量($ ResId)中存储了一个特定的数字,我在不同的部分中有以下内容。

<CalculatedWho>
  <ResourceId>85</ResourceId>
  <ResourceId>49</ResourceId>
  <ResourceId>43</ResourceId>
  <ResourceId>41</ResourceId>
</CalculatedWho>

如果其中任何一个与变量中存储的数字匹配,那么我将执行特定任务。我已经尝试了以下几个方面,但还没有做对。

<xsl:for-each select="//StrategyPool/Strategy">
  <xsl:if test="//StrategyPool/Strategy/CalculatedWho/ResourceId[text()=$ResId]" >
    <xsl:value-of select="StrategyName"/>
  </xsl:if>
</xsl:for-each>

问题是IF测试永远不会返回值,但我知道有匹配。我也尝试了以下作为if测试:

  <xsl:if test="/CalculatedWho/ResourceId[text()=$ResId]" >

和       

1 个答案:

答案 0 :(得分:1)

缺少一个特定的问题,我立刻发现错误的是你不需要在xsl中测试的“// StrategyPool / Strategy /”部分:if。此时的上下文节点已经是一个Strategy元素。此外,如果您打算选择StrategyName的值,请确保它是Strategy节点的CalculatedWho节点/直接子节点的兄弟。除此之外,根据$ ResId的值/类型,你可能会得到一些奇怪的强制行为。