我有一个如下所示的本地样式表,即它有一个
xsl:include
和指向 https URL 的 href
属性:
<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 无法处理本地样式表(例如
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
其他 XSLT 处理器似乎能够找到并加载包含的样式表和输出,例如
<root>
<transformed-foo>foo 1</transformed-foo>
<bar>bar 1</bar>
</root>
对于像这样的输入sample1.xml
<root>
<foo>foo 1</foo>
<bar>bar 1</bar>
</root>
我查看了 xsltproc 的选项,但只找到了一个选项
--nonet
禁止加载外部实体,我没有看到任何默认值可以解释为什么 HTTPS 访问失败。
任何人都可以重现此问题吗?如果没有,请告诉我需要哪个设置,以便 xsltproc 加载包含的 XSLT 模块?
看来,根据https://gitlab.gnome.org/GNOME/libxml2/-/blob/master/README.md,libxml/libxslt有多种构建选项是否包含模块,其中之一
--with-http HTTP support (off)
,我假设 off
表示默认设置不包括 HTTP 支持。
我认为这可以解释这一点,我尝试的所有安装(各种 WSL Ubuntu Linux 版本下的 xsltproc 包)可能都是使用该默认设置构建的,因此没有 HTTP 支持。