关于xslt中的根节点

时间:2015-11-29 17:34:29

标签: xml xslt

我是xslt的新手。

请参阅以下案例:

输入:

<?xml version="1.0"?>
         <Hello>
          <hi>
           <hii>
            shashi
           </hii>
          </hi>
         </Hello>

案例1:

Xslt代码:

 <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="/">
    <xsl:copy-of select="."/>
    </xsl:template>

</xsl:stylesheet>

案例1的输出:

<?xml version="1.0"?>
<Hello>
<hi>
<hii>
shashi
</hii>
</hi>
</Hello>

案例2:

Xslt代码:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/">
<xsl:copy-of select="./hi"/>
</xsl:template>
</xsl:stylesheet>

在案例2中没有显示输出。我不明白为什么?

<xsl:template match="/">

当它指向Hello节点的根节点时。因此在执行情况1时执行

<xsl:copy-of select="."/>

这将打印整个xml。

案例2: 何时执行

<xsl:copy-of select="./hi"/>

它应该在下面打印。

<hi>
    <hii>
    shashi
    </hii>
    </hi>

有人可以帮忙吗?

谢谢, Shashiraj NK

2 个答案:

答案 0 :(得分:2)

您需要了解术语的变化。在我所知道的所有树模型中,有两个相关节点:一个代表元素Hello(我称之为&#34;最外层元素&#34;希望避免混淆),加上其父节点,代表整个文件:让我们称之为&#34;容器&#34;目前。

XML规范本身并没有定义一个树模型,但它确实说&#34;只有一个元素,称为根或文档元素&#34; - 这是混乱的根源。

DOM将容器称为Document节点(或者,只是为了增加复杂性,如果DocumentFragment不是具有单个最外层元素的格式良好的文档)。它将最外面的元素称为&#34;文档元素&#34; - 至少具有匹配XML规范中术语的优点。

在XPath 1.0(以及XSLT 1.0)中,容器被称为&#34;根节点&#34;,并且规范使用术语&#34;文档元素&#34;对于最外层的元素,虽然它没有发挥非常重要的作用,主要是因为该模型支持具有多个元素子元素的文档节点。

在XPath 2.0(和XSLT 2.0)中,您可以构建树的根,其中树的根可以是任何类型的节点,例如,您可以拥有没有父节点的元素。所以术语有变化:a&#34; root&#34;现在是一个没有父母的节点(任何类型),而我称之为&#34;容器&#34;表示整个文档现在称为&#34;文档节点&#34;。

但无论您使用的是XPath 1.0还是2.0,/*都匹配Hello元素,/与其父节点(树的根)匹配。

答案 1 :(得分:1)

/选择根节点,该节点是包含所有其他节点的文档节点。根元素由/*选择。