2015-02-07 41 views
1

我有一個似乎與svg命名空間有關的問題。一種方式適用於FireFox,另一種方式適用於Chrome,但兩種方式都不適用。我曾嘗試添加xmlns =「http://www.w3.org/2000/svg」,但這並不會改變結果。xsl:template&svg命名空間在Firefox和Chrome之間的分歧

在下面的模板中,'use'和'text'標籤的前綴爲'svg':.這適用於FireFox,但不適用於Chrome。如果我刪除'svg:'前綴,那麼它可以在Chrome中運行,但不能在FireFox中運行。

有沒有一種方法適用於兩者?

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 
<xsl:output method="html" encoding="UTF-8" indent="no"/> 

<xsl:template name="attribute-header"> 
<svg:use xlink:href="#attribute-value-section-banner" x="{$location-x}" y="{$banner-y}"/> 
<svg:text class="attribute-label-text" x="{$center-line}" y="{$label-y}"> 
+1

請發佈足夠的代碼(XML + XSLT)以使我們能夠重現問題。並解釋究竟「不行」的意思。 – 2015-02-07 22:20:34

+0

使用XSLT和一個應該是(X)HTML和SVG混合的結果,您需要決定想要的結果文檔類型,如果您希望它是使用像您似的前綴的名稱空間的XML要做到這一點,那麼你應該使用''。如果您想創建允許您使用HTML和SVG元素的HTML5,那麼您需要確保使用沒有前綴的SVG元素,因爲HTML5不支持前綴和命名空間,就像您嘗試使用'svg:use'一樣。 – 2015-02-08 11:13:33

回答

0

我寫兩個測試用例,一個是http://home.arcor.de/martin.honnen/xslt/test2015020801.xml使用樣式表http://home.arcor.de/martin.honnen/xslt/test2015020801.xslxsl:output method="xml",第二個是http://home.arcor.de/martin.honnen/xslt/test2015020802.xml它使用樣式表http://home.arcor.de/martin.honnen/xslt/test2015020802.xsl<xsl:output method="html"。只要輸出方法是xml,XSLT就可以生成前綴爲SVG的元素(例如svg:circle),並且我擁有的所有三種瀏覽器,IE 11,Firefox和Chrome都可以使XHTML和SVG很好地呈現。在輸出方法html的第二個測試用例中,我確信SVG元素沒有前綴,因爲HTML5和HTML 4都不支持該語法。同樣,所有三種瀏覽器都知道如何呈現由XSLT以這種方式創建的HTML和SVG。

所以,我想你是混合HTML輸出與XML名稱空間和預定義的限定名稱,決定是否要用你的XSLT創建XML,如我的第一個例子,然後你完全支持XML和XML命名空間語法,或者是否希望使用XSLT創建HTML5,然後必須遵循HTML5語法,該語法不支持前綴元素名稱和只有幾個預定義屬性(請參閱http://www.w3.org/TR/html5/syntax.html#attributes-0)。這樣你應該得到一致的結果。

+0

謝謝。我不明白,瀏覽器的輸出應該是XML。我想這就是當人們將W3School的課程混合成網頁時發生的情況。無論如何,這是魔術。 – 2015-02-08 14:57:37

+0

有點題外話 - 我在哪裏可以找到一個好的皮棉類型的應用程序來標記這類事情?我想我誤解了xmllint和xsltproc的作用。 – 2015-02-08 15:31:05

+0

那麼,如果您使用xsltproc進行轉換,但希望將其作爲text/html提供給現代瀏覽器的HTML5解析器進行解析,那麼您可以通過HTML5驗證器運行結果文檔,例如https://validator.nu /?doc=http%3A%2F%2Fhome.arcor.de%2Fmartin.honnen%2Fxslt%2Ftest2015020802.html給出的錯誤,如「屬性xmlns:svg不允許在這裏」。如果您直接在瀏覽器中執行XSLT,那麼我不確定當前是否有好的工具,我不確定各種開發人員工具瀏覽器的瀏覽器控制檯是否提供了有用的警告或錯誤消息。 – 2015-02-08 15:44:56