记录功能使用问题

时间:2014-06-10 21:37:06

标签: xml xslt

我想在XML文件上执行XPath并根据XSLT中提供的密钥检索值,并且必须使用结果。

以下是xml文件

<?xml version="1.0" encoding="UTF-8"?>
<mm:ValueMaps
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mm="http://WCToSSFSMediationModule">

    <mm:Map name="storeIdToOrganizationCode">  
        <mm:Entry key="19658">001GB</mm:Entry>
        <mm:Entry key="11306">001CA</mm:Entry>
    </mm:Map>
</mm:ValueMaps>

下面是我在XSLT中使用的文档函数中使用的XPath,但是我的错误是它无法正常工作。有些人可以帮我解决一下。

<xsl:variable name="actualOrganizationCode"  
              select="document(&quot;Maps.xml&quot;,&quot;mm:ValueMaps/mm:Map[@name='storeIdToOrganizationCode']/mm:Entry[@key=$storeId]/text()&quot;)"/>

storeId是一个在XSLT中保存值的变量,我在document()函数中使用它。

FYI Maps.xml位于XSLT的同一目录下。

此致

塔拉克。

1 个答案:

答案 0 :(得分:2)

document()函数将返回一个可以运行XPath表达式的上下文。您不将表达式包含为第二个参数。你应该像这样使用它:

<xsl:value-of select="document('Maps.xml')/mm:ValueMaps/mm:Map[@name='storeIdToOrganizationCode']/mm:Entry[@key=$storeId]/text()"/>

您可能还希望将其放在变量中:

<xsl:variable name="$doc" select="document('Maps.xml')"/>

当您希望访问其任何节点时,请参考它:

 <xsl:value-of select="$doc/mm:ValueMaps/mm:Map[@name='storeIdToOrganizationCode']/mm:Entry[@key=$storeId]/text()" />

您还应该在样式表中注册mm前缀,因为源文档中使用的前缀不会被您的XPath表达式考虑在内样式表。