将XSL应用于外部XML

CLi*_*own 12 xml xslt

目前我使用:

<?xml-stylesheet type="text/xsl" href="XSL.xsl"?>
Run Code Online (Sandbox Code Playgroud)

将XSL链接到XML.

如果我的xml在这里:www.externaldomain.com/rss.xml(在我的域之外)我怎样才能将XSL链接到XML?

我可以将XSL指向文件或链接吗?

Mad*_*sen 14

您可以通过实体引用创建包含远程XML文件的XML内容的本地XML文件.

下面的示例将为您提供包装器文档元素中的远程XML文件的内容.

然后,您可以在本地XML文件中包含样式表处理指令.

但是,由于本地文件具有包装器文档元素,因此您可能需要指向使用xsl:import的"包装器XSLT" 以从包装器元素内的内容开始导入原始XSL.xsl和apply-templates.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
<!ENTITY content SYSTEM "http://stackoverflow.com/feeds">
]>
<?xml-stylesheet type="text/xsl" href="XSL.xsl" ?>
<wrapper>
    &content;
</wrapper>
Run Code Online (Sandbox Code Playgroud)


Eam*_*nne 2

您无法使用“纯”xml+xslt(*) 来实现此目的。一些外部代码需要识别 xml 和应转换它的 xslt。

由于您似乎正在转换 XML,我猜测您是在网络浏览器中执行此操作。

您可以使用 javascript 来完成此操作,如w3schools 上所示。但是,如果您执行基于 javascript 的请求(即 AJAX/XHR),跨域限制仍然适用:如果原始服务器未设置适当的 CORS 标头以允许跨域 javascript 访问,则您需要代理通过您自己的服务器发送 xml 请求。

(*):Mad 的答案使用实体引用巧妙地将外部 xml 嵌入到包含文档中。这绝对值得一试,但请注意,这种基于实体的包含已在多个信息泄露泄漏中使用,这就是为什么它通常不在 xml 解析器中启用(特别是,这不应该能够破坏浏览器中的 CORS)。你只需根据你的情况尝试一下即可。