我有这个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的值,但无法解决方法。
答案 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()
函数的更多信息。