使用Saxon XSLT传递多文档参数时无法选择XML标签的问题
解决方案
核心问题是XML命名空间未匹配:你的XML文档里所有元素(<resEvento>、<CNPJ>等)都默认属于命名空间http://www.portalfiscal.inf.br/nfe,但XSLT中的XPath选择器没有指定这个命名空间,导致无法匹配到元素。
修改步骤如下:
- 在XSLT的
<xsl:stylesheet>标签中声明该命名空间,并绑定一个前缀(比如nfe):
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:nfe="http://www.portalfiscal.inf.br/nfe"> <!-- 新增命名空间声明 -->
- 修改XPath选择器,使用前缀匹配命名空间下的元素:
<xsl:for-each select="$docs"> <xsl:value-of select="nfe:resEvento/nfe:CNPJ/text()"/> <!-- 加上nfe前缀 --> </xsl:for-each>
另外验证了你的Java代码:documentBuilder.build()返回的确实是文档节点(符合XSLT参数as="document-node()*"的要求),这部分没有问题,只需修改XSLT即可解决问题。
内容的提问来源于stack exchange,提问作者Paulo
相关产品推荐
相关产品推荐

