2009-09-27 72 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,我還沒有嘗試其他版本)