我正在将节点的值提取到变量中:
<xsl:variable name="UPC" select="//x:input[@name='field-keywords']/@value"/>
<xsl:value-of select="$UPC" /> <!-- This works! -->
然后我想查询具有相同值的节点的另一个XML文档:
<xsl:value-of select="document('price_list.xml')/im_prices/row/UPC_Code[text()='$UPC']"/>
当我用$ UPC替换实际值时,我发现节点很好,但是当我使用$ UPC时它不起作用。
我无法弄清楚如何将值提取到变量并在将来的xpath查询中使用它。
答案 0 :(得分:4)
只需删除撇号 - 在表达式中与 literal “$ UPC”进行比较:
<xsl:value-of select=
"document('price_list.xml')
/im_prices/row/UPC_Code[text()=$UPC]"/>
关于这个问题还有更多要说的内容:
我正在将节点的值提取到变量中:
<xsl:variable name="UPC" select="//x:input[@name='field-keywords']/@value"/>
不,这不是“提取值” - 变量的值是 set 的节点,又名 nodeset 。
另外,请注意,此节点集通常具有多个节点。
<xsl:value-of select="$UPC"/> <!-- This works! -->
这将输出变量$UPC
中包含的第一个节点的字符串值。
Then I want to query another XML document for a node with the same value:
<xsl:value-of select="document('price_list.xml')/im_prices/row/UPC_Code[text()='$UPC']"/>
即使删除了撇号,上面也会输出document('price_list.xml')/im_prices/row/UPC_Code
元素的 first 的字符串值,这些元素有一个文本节点子节点,其字符串值等于字符串值变量$UPC
中包含的一个节点。