2010-11-12 81 views
3

我剛開始修改XML,並且我有一個問題。關於XSL模板匹配的基本問題

XML文件:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="style.xsl"?> 
<bucket version="Root Version 1A2B3C"> 
</bucket> 

XSL文件

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="bucket"> 
    <html> 
     <body> 
     <h3> 
      <xsl:value-of select="@version"/> 
     </h3> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

我有關於XSL的第三行的問題。 如果我使用

<xsl:template match="bucket"> - Root Version 1A2B3C印刷

<xsl:template match="/"> -

沒有打印 - 我想"/"指根。 我的理解是,它應該是打印 「1.0」(<?xml version)或 「根版本1A2B3C」(bucket version)

請讓我知道爲什麼它不工作。

感謝

+0

好問題,+1。請參閱我的答案以獲得解釋。 – 2010-11-12 20:27:31

+0

如果你是古怪的,那麼我會添加另一個方面。 '<?xml'部分屬於所謂的xml序言。XML序言可能包含處理指令,註釋和文檔類型聲明。 – 2010-11-12 20:47:34

回答

2

/表示文檔節點() - 即整個文檔

在提供的XML中,bucket元素是文檔的頂層元素。它不是根節點。

頂部元素bucket仍然可以有兄弟,例如處理指令或註釋節點。頂層元素和它的兄弟姐妹都有一個父親,這是/ - 文檔的根節點。

2

http://www.w3.org/TR/xpath/#root-node

根節點是樹的根 根節點不會發生,除非 樹的根節點 爲文檔元素是 的子節點。根節點還有 作爲子處理指令, 註釋節點用於處理 指令和註釋,在序言中出現 ,並在 文檔元素結束後出現。

一定要記住,(從http://www.w3.org/TR/xpath/#section-Introduction):

的XPath上的XML文檔的摘要, 邏輯結構, 而不是其表面​​語法進行操作。

因此,文檔根/表示整個文檔的「邏輯」根。