Solr 8.8导入XML时出现Illegal attribute 'xpath-default-namespace'错误原因问询
错误根本原因
- Solr 8.8默认使用JDK内置的Xalan XSLT处理器,该处理器仅支持XSLT 1.0规范,你编写的XSLT文件中使用的
xpath-default-namespace属性是XSLT 2.0版本才新增的特性,Xalan无法识别该属性,因此直接抛出非法属性的报错。 - 你的XSLT文件显式声明了
version="2.0",还用到了replace()、string-join()等XSLT 2.0专属函数,就算临时删除xpath-default-namespace属性,后续执行过程中也会因为函数不存在触发新的报错。
可选修复方案
- 方案一:调整XSLT为XSLT 1.0兼容写法
- 移除
xpath-default-namespace属性,给OAI-PMH的命名空间手动定义前缀,例如增加声明xmlns:oai="http://www.openarchives.org/OAI/2.0/",所有XPath路径中的OAI节点都加上oai:前缀,比如把原来的OAI-PMH/ListRecords/record改成oai:OAI-PMH/oai:ListRecords/oai:record。 - 把XSLT 2.0专属函数替换为1.0支持的实现:简单字符串替换可以用
translate()替代replace(),字符串拼接可以用<xsl:for-each>循环拼接替代string-join()。
- 移除
- 方案二:为Solr集成Saxon处理器
把你本地使用的Saxon 9.5.1.6 HE对应的jar包放到Solr安装目录下的server/lib/ext文件夹中,重启Solr后会自动优先使用Saxon作为XSLT处理器,无需修改现有XSLT代码即可正常运行。
内容的提问来源于stack exchange,提问作者Asatur
相关产品推荐
相关产品推荐

