如何提取值并在将来的xpath查询中使用它?

时间:2012-06-18 12:19:02

标签: xml xslt xpath

我正在将节点的值提取到变量中:

<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查询中使用它。

1 个答案:

答案 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中包含的一个节点。