XSL 2.0运行报'xpath-default-namespace'属性非法问题咨询
XSLT
xpath-default-namespace 非法属性错误排查方案 错误成因
xpath-default-namespace 是XSLT 2.0标准才新增的根节点属性,出现Illegal attribute 'xpath-default-namespace'报错的原因只有两类:
- 实际运行代码的XSLT处理器不支持2.0标准,默认按照XSLT 1.0规则校验代码,比如绝大多数浏览器内置XSLT处理器、老旧的Xalan处理器都仅支持1.0标准,无法识别该属性
- 代码中
<xsl:stylesheet>根节点声明的版本号为version="1.0",但却添加了仅2.0支持的xpath-default-namespace属性,处理器按1.0语法校验触发异常
解决方案
根据你的运行环境选择对应方案:
可使用XSLT 2.0运行环境
- 更换支持XSLT 2.0及以上版本的处理器,常用可选Saxon HE/PE/EE、AltovaXML等
- 确认
<xsl:stylesheet>根节点的版本声明正确,示例正确配置:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xpath-default-namespace="http://你的目标默认命名空间地址">
- 如果你在Java程序中调用XSLT能力,需要显式指定Saxon作为实现类,避免使用JDK内置的默认Xalan处理器
仅能使用XSLT 1.0运行环境
删除xpath-default-namespace属性,通过显式命名空间前缀适配:
- 在
<xsl:stylesheet>节点声明对应命名空间的自定义前缀:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:myns="http://原xpath-default-namespace对应的命名空间地址" version="1.0">
- 将所有XPath表达式中原本不带前缀的节点,统一添加
myns:前缀,例如原写法//order/id需要调整为//myns:order/myns:id
内容的提问来源于stack exchange,提问作者shashi sharma
相关产品推荐
相关产品推荐

