2010-11-12 46 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文档的摘要, 逻辑结构, 而不是其表面​​语法进行操作。

因此,文档根/表示整个文档的“逻辑”根。