在Xpath字符串中传递变量

时间:2015-03-26 15:57:12

标签: xml xslt xpath xslt-1.0

我有一个xsl文件,其中包含一些xPath ..

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" encoding="UTF-8"/>

<xsl:variable name="ref_num" select="ABCD"/>    

<xsl:template match="holiday">
    <fromPrice>
        <xsl:copy-of select="document('/file/to/path/in/documents/FILE1.xml',/)/dataroot/Tour/RefNo[.='ABHC']/preceding-sibling::AXL "/>
    </fromPrice>
</xsl:template>

</xsl:stylesheet>

情景......
xml文件正在返回<fromPrice>(其值来自FILE1.xml元素)文件的<AXL>值,如下所示:

FILE1.xml

<Tour>
    <Allocation>0</Allocation>
    <Available>16</Available>
    <AXL>4658</AXL>
    <ALO>2195</ALO>
    <RefNo>AABC</RefNo>
</Tour>
<Tour>
    <Allocation>0</Allocation>
    <Available>16</Available>
    <AXL>1295</AXL>
    <ALO>595</ALO>
    <RefNo>ATSS</RefNo>
</Tour>

问题:
我希望在$ref_num的xPath中传递"/RefNo[.='ABHC']",以便RefNo包含变量ABCD的值$ref_num。这样,如果$ref_num发生更改,我就不必再次在"/RefNo[.='ABHC']"对xPath进行硬编码。

到目前为止,我尝试了以下内容:
* /RefNo[.=' "+$ref_num+ "']但这不起作用。{样式表错误。无法编译}
* /RefNo[.=' \"+$ref_num+ \"']这也不起作用。{样式表错误。无法编译}
* /RefNo[.='+$ref_num+']这也不起作用。{样式表错误。无法编译}

1 个答案:

答案 0 :(得分:2)

我不知道哪里会出现问题,只需在表达式中使用变量。

<xsl:variable name="ref_num" select="AABC" />
<xsl:variable name="filePath" select="'/file/to/path/in/documents/FILE1.xml'" />
<xsl:variable name="tours" select="document($filePath)/dataroot" />

<xsl:template match="holiday">
    <fromPrice>
        <xsl:copy-of select="$tours/Tour[RefNo = $ref_num]/AXL" />
    </fromPrice>
</xsl:template>

提示:XPath表达式不是字符串。这不是插值。