我是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
答案 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)
/
选择根节点,该节点是包含所有其他节点的文档节点。根元素由/*
选择。