2009-09-27 42 views
10

目前我使用:应用XSL到外部XML

<?xml-stylesheet type="text/xsl" href="XSL.xsl"?> 

要连结XSL到XML。

如果我的XML是在这里:www.externaldomain.com/rss.xml(我的域名外)我怎样才能联系到XML的XSL?

我可以指出的XSL到文件或链接?

回答

2

你不能用 “纯” XML + XSLT(*)实现这一目标。一些外部代码需要识别xml和应该转换它的xslt。

既然你似乎转换XML,我会想你是在网页浏览器这样做。

您可以使用JavaScript,为demonstrated on w3schools做到这一点。但是,如果您正在执行基于JavaScript的请求(例如AJAX/XHR),则跨域限制仍然适用:如果始发服务器未设置适当的CORS标头以允许跨域JavaScript访问,则需要代理该XML请求通过您自己的服务器。

(*):Mad's answer使用实体引用巧妙地嵌入外部xml含文件内。这绝对值得一试,但请注意,这种基于实体的包含已用于多种信息泄露泄漏,这就是为什么它通常在xml解析器中未启用的原因(特别是,这不应该能够颠覆浏览器中的CORS)。你只需要在你的情况下尝试。

+0

这不会工作,他明确要求解决方案时,XML是“我的域名之外”。 Javascript不会跨域。为什么他提出的答案超出了我的意思,因为它显然是100%错误的,我只是意识到花了20分钟试图让这个例子起作用......实际上,当这个例子有任何用处时,它只能在同一个域上的文件上工作,这个文件已经可以被编辑了...所以基本上我想说的是,那是错的,我为此低估了你。 – Cody 2014-12-01 07:18:57

+0

@Cody:对不起,我会更新答案以突出CORS的要求。如果原始网站支持CORS,你可能可以在javascript中执行此操作;否则你需要代理XML。 – 2014-12-02 12:37:15

+0

@Cody:我曾经是一家公司的运营商,我们正在做一些程序。要知道我们是否可以继续使用,我们可以使用由合作伙伴组织填充的XML文件,但我们无法访问它,因此要求他们更改其中的任何内容是毫无疑问的。我们正在等待几个具体信息在这里,文件很长。我们希望仅显示特定标签的内容。 因此,我们在这种情况下需要将XSL应用于外部XML文件。 此致敬礼。 – 2017-09-03 00:35:31

3

如果你想运行里面.NET中的XSLT,你可以方便地使用XslCompiledTransform类.NET来实现这一目标。

如果您试图在例如在命令行中,可以使用一堆工具将XSLT文件应用于给定的XML文件 - 但通常是位于本地硬盘上的工具。

参见例如Oleg Tkachenko的网站info on NXSLT和其他XSLT工具,或者查看此CodeProject article以获得Windows外壳扩展,以将XSLT应用于给定的XML文件(位于本地硬盘上)。

希望这会有所帮助。

马克

13

您可以通过实体参考创建一个本地XML文件,其中包含远程XML文件的XML内容。

下面的例子会给你一个包装文件中的远程XML文件内容文档元素。

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

然而,由于本地文件具有包装文档元素,您可能需要指向一个使用XSL “包装XSLT”:进口导入原XSL.xsl和应用模板出发与包装内的内容元素。

<?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> 
2

你可以写一个本地XML文件作为包装:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="XSL.xsl" ?> 
<wrapper Source="http://www.externaldomain.com/rss.xml"/> 

,延长你的样式,使其了解包装:

<xsl:template match="wrapper"> 
    <xsl:apply-templates select="document(./@Source)"/> 
</xsl:template> 

我还没有与XML测试它文件通过http,但它可以与本地XML文件一起使用,我不想更改它以包含xml样式表处理指令。它适用于Firefox,Opera和IE(7,我还没有尝试其他版本)