Xslt 我可以基于变量属性在XPath中进行选择吗?

Xslt 我可以基于变量属性在XPath中进行选择吗?,xslt,xpath,xslt-1.0,xpath-1.0,Xslt,Xpath,Xslt 1.0,Xpath 1.0,我认为这是不可能的,但我想有一个明确的答案 XML: 法文 ... 我的书 我 XPath 101 你 ... ..... 然后在XSL中对主要图书信息进行简单转换,但我希望根据翻译xml对标题进行翻译—类似这样的工作: <xsl:value-of select="//translation[@English='title']/@French"/> <xsl:value-of select="//translation[@English='Author']/@French"/

我认为这是不可能的,但我想有一个明确的答案

XML:

法文 ... 我的书 我 XPath 101 你 ... ..... 然后在XSL中对主要图书信息进行简单转换,但我希望根据翻译xml对标题进行翻译—类似这样的工作:

<xsl:value-of select="//translation[@English='title']/@French"/>
<xsl:value-of select="//translation[@English='Author']/@French"/>

但是我想用XML中的agentlang值替换属性@French

我正在使用MSXML/XSLT1.0


有什么方法可以做到这一点吗?

是的,可以使用
local-name()
查找具有给定动态值的元素或属性。我已将查找值存储在:


使用模板可以得到相同的结果

<xsl:template name="translate_english_to_local">
  <xsl:param name="text>

  <xsl:value-of select="//translation[@English=$text]/@*[local-name()=//agentlang]" />

</xsl:template>


谢谢,这很有效;我尝试了变量,但缺少的是local-name()函数。
<xsl:variable name="lang" select="//agentlang/text()" />
<xsl:value-of select="//translation[@English='title']/@*[local-name()=$lang]" />
<xsl:value-of select="//translation[@English='title']/@*[local-name()=//agentlang]" />
<xsl:template name="translate_english_to_local">
  <xsl:param name="text>

  <xsl:value-of select="//translation[@English=$text]/@*[local-name()=//agentlang]" />

</xsl:template>
<xsl:call-template="translate_english_to_local">
    <xsl:with-param name="text">title</xsl:with-param>
</xsl:call-template>