xsltproc 给出警告:“无法加载外部实体”和 xsl:include 到 HTTPS URL 的错误“xsl:include : 无法加载 ..”

问题描述 投票:0回答:1

我有一个如下所示的本地样式表,即它有一个

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 模块?

xslt libxslt
1个回答
0
投票

看来,根据https://gitlab.gnome.org/GNOME/libxml2/-/blob/master/README.md,libxml/libxslt有多种构建选项是否包含模块,其中之一

--with-http HTTP support (off)
,我假设
off
表示默认设置不包括 HTTP 支持。

我认为这可以解释这一点,我尝试的所有安装(各种 WSL Ubuntu Linux 版本下的 xsltproc 包)可能都是使用该默认设置构建的,因此没有 HTTP 支持。

© www.soinside.com 2019 - 2024. All rights reserved.