关于xslt中的根节点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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
您需要了解术语的变化。在我所知道的所有树模型中,有两个相关节点:一个表示元素Hello
(我称之为“最外层元素”,希望避免混淆),加上它的父节点,它代表整个文档:让我们调用那个“容器”当下。
XML规范本身没有定义树模型,但它确实说“只有一个元素,称为根或文档元素” - 这是混淆的大部分原因。
DOM将容器称为Document节点(或者,只是为了添加复杂性,如果DocumentFragment不是具有单个最外层元素的格式良好的文档)。它将最外层元素称为“文档元素” - 至少具有匹配XML规范中术语的优点。
在XPath 1.0(以及XSLT 1.0)中,容器称为“根节点”,规范使用术语“文档元素”作为最外层元素,尽管它不起非常重要的作用,主要是因为模型支持具有多个子元素的文档节点。
在XPath 2.0(和XSLT 2.0)中,您可以构造树,其中树的根可以是任何类型的节点,例如,您可以拥有没有父节点的元素。因此术语发生了变化:“root”现在是一个没有父节点的节点(任何类型),而我所谓的“容器”代表整个文档现在被称为“文档节点”。
但无论您使用的是XPath 1.0还是2.0,/*
都匹配Hello
元素,而/
匹配其父节点,后者是树的根。
/
选择根节点,该节点是包含所有其他节点的文档节点。根元素由/*
选择。
以上是关于关于xslt中的根节点的主要内容,如果未能解决你的问题,请参考以下文章
将命名空间从 java 传递给 xslt,并使用 java 中的参数作为 xslt 中的节点
如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?