xsltproc加载HTTPS URL的xsl:include失败:求解决方案
xsltproc无法加载HTTPS链接的XSLT模块问题解决
问题场景
本地样式表xslt-test1.xsl包含指向HTTPS地址的xsl:include:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:include href="https://martin-honnen.github.io/xslt/foo-transform-module.xsl"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
执行xsltproc xslt-test1.xsl sample1.xml时,出现加载失败的报错:
warning: failed to load external entity "https://martin-honnen.github.io/xslt/foo-transform-module.xsl" compilation error: file xslt-test1.xsl line 3 element include xsl:include : unable to load https://martin-honnen.github.io/xslt/foo-transform-module.xsl
输入文件sample1.xml内容:
<root> <foo>foo 1</foo> <bar>bar 1</bar> </root>
其他XSLT处理器可正常加载该模块并输出预期结果:
<root> <transformed-foo>foo 1</transformed-foo> <bar>bar 1</bar> </root>
原因分析
xsltproc依赖libxml2库处理网络资源请求,部分系统中预编译的libxml2默认未启用HTTPS支持(编译时未加入--with-openssl参数),导致无法解析HTTPS链接的外部实体。
解决办法
检查libxml2的HTTPS支持
执行命令查看libxml2的编译特性:xml2-config --features如果输出中没有
https标识,说明当前libxml2不支持HTTPS。需要重新编译libxml2并添加--with-openssl参数,或安装系统提供的带HTTPS支持的libxml2包(比如部分发行版的libxml2-openssl类包)。本地替换远程模块
若无法重新编译或安装libxml2,可手动将远程XSLT模块下载到本地目录,修改样式表中的xsl:include路径为本地文件:<xsl:include href="./foo-transform-module.xsl"/>之后再执行xsltproc命令即可正常处理。
排查网络问题
先验证系统能否正常访问该HTTPS链接:curl https://martin-honnen.github.io/xslt/foo-transform-module.xsl若无法获取内容,需检查网络连通性、代理设置或防火墙规则,确保xsltproc能访问目标地址。
内容的提问来源于stack exchange,提问作者Martin Honnen
相关产品推荐
相关产品推荐

