根节点含命名空间时,如何在XSLT中获取ItemOut/Shipping/Description值?
问题解决:带命名空间的XML节点获取
你的问题核心是没有在XPath中使用正确的命名空间前缀,导致无法匹配到目标节点。
问题原因
你的XML根节点Request声明了命名空间http://tempuri.org/cXML,这意味着XML中所有子节点(包括ItemOut、Shipping、Description)都属于这个命名空间。而你当前的ShipMethod节点XPath:
<xsl:value-of select="*/ItemOut[1]/Shipping/Description"/>
没有使用XSLT中定义的cxml前缀,XPath会默认查找无命名空间的节点,自然匹配不到目标内容。
正确写法
你需要在所有XML节点前加上cxml:前缀,两种可行的XPath写法:
- 相对路径(基于当前上下文):
<xsl:value-of select=".//cxml:ItemOut[1]/cxml:Shipping/cxml:Description"/>
- 绝对路径(更精准,避免上下文干扰):
<xsl:value-of select="/cxml:Request/cxml:OrderRequest/cxml:ItemOut[1]/cxml:Shipping/cxml:Description"/>
修改后的ShipMethod片段
替换你XSLT中的对应部分:
<ShipMethod> <xsl:value-of select=".//cxml:ItemOut[1]/cxml:Shipping/cxml:Description"/> </ShipMethod>
额外提醒
检查XSLT中所有引用XML节点的XPath,确保都使用了cxml:前缀——比如你已经在OrderRequestHeader和ItemOut的for-each中正确使用了前缀,保持一致即可。
内容的提问来源于stack exchange,提问作者Sharath Nandi Ramachandra
相关产品推荐
相关产品推荐

