我想在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("Maps.xml","mm:ValueMaps/mm:Map[@name='storeIdToOrganizationCode']/mm:Entry[@key=$storeId]/text()")"/>
storeId
是一个在XSLT中保存值的变量,我在document()
函数中使用它。
FYI Maps.xml
位于XSLT的同一目录下。
此致
塔拉克。
答案 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表达式考虑在内样式表。