如果我有一个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'。就在我尝试进行上述比较时,它什么也没有返回。
答案 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]" />