2011-11-02 40 views
2

我測試了XSLT恆等變換,所以我隨機抽取的www.w3schools.com下面的例子,因爲它可以讓我在網上嘗試:XSLT恆等變換

http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog_apply

我在改變了XSLT右窗格是身份轉換:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

並試用了它。我發現的是/catalog/cd/title節點不會被複制到輸出中(但其他所有事情都會)。如果我將/catalog/cd/title的名稱更改爲/catalog/cd/title1(或任何其他名稱),它會複製該節點。

所以我想知道是否在www.w3schools.com上的XSLT實現中存在一個錯誤,或者是否對XML節點「標題」有特殊意義,導致它不被複制?我打算如上所述使用XSLT轉換,但我想確保我知道任何陷阱......

回答

4

這個w3schools工具對於測試XML到HTML轉換非常有用,因爲它試圖在瀏覽器中將轉換結果呈現爲HTML。通過您的身份轉換,您不會創建任何HTML,而是創建XML。只有轉換結果中的「title」元素將瀏覽器視爲已知但錯誤放置的HTML元素,因此它不會將其顯示在頁面中。所有其他元素都是未知的,因此它們的文本內容被渲染

基本上讓自己成爲一個獨立的XSLT處理器或XML編輯器,w3schools工具對調試和測試除XML到HTML轉換之外的任何內容都沒有用處。

1

它在Debian上使用xsltproc可以正常工作。

更新:工作過使用撒克遜XLST ...

問題應與W3C學校實施......馬丁的回答後

更新:呃......沒問題,但只有XML到HTML轉換...我停下來的一天? ;)

+0

啊謝謝直到現在我還沒有意識到xsltproc! – Kevin

+0

您也可以使用saxon-xslt(取決於目標)。這些是我最喜歡的用於XSLT2的saxonb。 – Renaud

1

我無法重現您的結果,但它可能取決於瀏覽器。你忽略的是,該頁面正在將轉換的結果呈現爲HTML,而在你的情況下則不是。確切地說,瀏覽器對使用非HTML標記的XML所做的操作可能是不可預測的。

+0

+1僅用於實施撒克遜! ;) – Renaud

0

我知道這是舊的帖子,但我沒有在這裏看到正確的答案。當前節點的

<xsl:copy> 

命名空間節點會自動複製爲好,但子節點和當前節點的屬性不會自動複製!

<xsl:copy-of> 

命名空間節點,子節點和當前節點的屬性被自動複製的!