关于XSL模板匹配的基本问题

时间:2010-11-12 19:53:06

标签: xslt template-matching

我刚开始修补XML,我有一个问题。

XML文件:

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

XSL FILE

<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)或“Root Version 1A2B3C”(bucket version)

请让我知道它为什么不起作用。

由于

2 个答案:

答案 0 :(得分:2)

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

  

根节点是树的根。   除了as之外,不会发生根节点   树的根。元素节点   对于文档元素是一个孩子   根节点。根节点也有   作为儿童处理指导和   注释节点进行处理   发生的说明和评论   在序言和结束后   文件要素。

永远记住(来自http://www.w3.org/TR/xpath/#section-Introduction):

  

XPath在摘要上运行,   XML文档的逻辑结构,   而不是它的表面语法。

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

答案 1 :(得分:2)

/表示document-node() - 即整个文档

在提供的XML中,bucket元素是文档的顶部元素。它不是根节点。

顶级元素bucket仍然可以有兄弟姐妹,例如处理说明或评论节点。 top元素及其兄弟元素都有一个父元素,这是/ - 文档的根节点。