测试Attribute = Node Value是否使用变量

时间:2012-02-12 21:29:11

标签: xml variables xslt

我有这个XML文件

<all>
 <general>
  <catagory_name>
   <catg>Action</catg_1>
   <catg>Other</catg_2>
  </catagory_name>
 </general>
 <games>
  <catagory name='Action'>
   <game>
    <name>1945<!--name--></name>
    <url><!--URL to game download--></url>
    <image><!--image location--></image>
    <alt>1945 Icon<!--alt text for image--></alt>
   </game>
  </catagory>
  <catagory name='Other'>
   <game>
    <name>Platform Game<!--name--></name>
    <url><!--URL to game download--></url>
    <image><!--image location--></image>
    <alt>Platform Game Icon<!--alt text for image--></alt>
   </game>
  </catagory>
 </games>
</all>

目前我的xslt摘录

<xsl:for-each select="all/general/catagory_name">
<xsl:variable name="catg"><xsl:value-of select="catg"/></xsl:variable>
<xsl:if test="//all/games/catagory[@name=$catg]/game[position() = (1<!--I use nth term here but this is not relevant to my question so just pretend value = 1-->)]/url">
<!--action-->
</xsl:if>
</xsl:for-each>

我想知道如何将[@ name = $ catg]替换为// all / general / catagory_name / catg_1的值,但无法解决方法。

1 个答案:

答案 0 :(得分:2)

  

我想知道如何用{的值替换[@name=$catg]   //all/general/catagory_name/catg_1但无法解决问题。

使用

/all/games/catagory[@name = current()/catg1]

这将选择所有/all/games/catagory元素,其name属性的字符串值等于字符串值1(在此特定情况下恰好为1)catg1当前匹配的子项(或目前由xsl:for-each)元素执行。

阅读有关W3C XSLT 1.0规范中的XSLT current()函数的更多信息