XPath:使用XSLT根据另一个节点的值选择节点

时间:2016-05-27 23:43:42

标签: xml xslt xpath

[我看过类似的问题,但我没有找到答案,请不要在没有实际阅读的情况下标记副本]

如何使用xslt中的savetype内容选择节点。

例如在此示例中savetype=dexterity所以我想要

的值
<xsl:value-of select="/root/character/abilities/dexterity/bonus"/>

无论如何在没有<xsl:choose>语句的情况下执行此操作,我可以从savetype

的值构建XPATH语句吗?

示例文件

<?xml version="1.0" encoding="iso-8859-1"?>
<root version="3.1" release="7|CoreRPG:3">
  <character>
     <abilities>
        <charisma>
           <bonus type="number">-1</bonus>
        </charisma>
        <constitution>
           <bonus type="number">2</bonus>
        </constitution>
        <dexterity>
           <bonus type="number">2</bonus>
        </dexterity>
     </abilities>
     <powers>
        <id-00005>
           <actions>
              <id-00001>
                 <savetype type="string">dexterity</savetype>
              </id-00001>
           </actions>
        </id-00005>
     </powers>
  </character>
</root>

1 个答案:

答案 0 :(得分:2)

  

我可以从savetype

的值构建XPATH语句

是。尝试:

<xsl:value-of select="/root/character/abilities/*[name()=//savetype]/bonus" />

另一种选择是使用密钥。在样式表的顶层定义一个键:

<xsl:key name="k" match="abilities/*" use="name()" />

然后使用:

<xsl:value-of select="key('k', //savetype)/bonus" />