根据另一个文档中节点的值选择节点

时间:2014-11-05 18:22:57

标签: xml xslt xpath

如果我有一个XML格式的查找表:

<lookup>
    <element key='abc'>Hello</element>
</lookup>

另一个像这样的XML文件:

<root>
    <child key='abc'>Goodbye</child>
</root>

我在将第一个文件加载到变量后执行此XSL转换:

<xsl:variable name="myvar" select="document('lookupfile.xml')/lookup" />
<xsl:value-of select="$myvar/element[@key=/root/child/@key]" />

我想要的是'Hello'的价值,但我什么也得不到。我不允许直接比较两个节点的值吗?我看到的每个例子总是比较[@ key ='hardCodedValue']而永远不会比较另一个节点的值。

如果我像这样硬编码值:select =“$ myvar / element [@ key ='abc']它会返回'Hello'。如果我用select =”/ root直接输出root / child键的值/ child / @ key“我得到正确的值'abc'。就在我尝试进行上述比较时,它什么也没有返回。

1 个答案:

答案 0 :(得分:1)

在谓词中,上下文是element文档的lookupfile.xml元素,因此将在该文档中评估/root/child/@key

您可以使用current()

执行此操作
<xsl:variable name="myvar" select="document('lookupfile.xml')/lookup" />
<xsl:value-of select="$myvar/element[@key = current()/root/child/@key]" />

或将值存储在变量中并使用:

<xsl:variable name="myvar" select="document('lookupfile.xml')/lookup" />
<xsl:variable name="mykey" select="/root/child/@key" />
<xsl:value-of select="$myvar/element[@key = $mykey]" />