当前位置: 首页 > 知识库问答 >
问题:

关于xslt中的根节点

陆晓博
2023-03-14

我是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个答案

上官英哲
2023-03-14

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

於英朗
2023-03-14

你需要注意这里术语的变化。在我所知道的所有树模型中,有两个相关节点:一个表示元素Hello(我称之为“最外层元素”,希望避免混淆),另一个表示整个文档的父节点:我们暂时称之为“容器”。

XML规范本身没有定义树模型,但它确实说“只有一个元素,称为根或文档元素”——这是许多混乱的根源。

DOM将容器称为Document节点(或者,为了增加复杂性,在它不是具有单个最外层元素的格式良好的文档的情况下,称为DocumentFraank)。它将最外层的元素称为“文档元素”——这至少具有与XML规范中的术语相匹配的优点。

在XPath 1.0(因此XSLT 1.0)中,容器被称为“根节点”,规范使用术语“文档元素”表示最外层的元素,尽管它没有发挥非常重要的作用,主要是因为该模型支持具有多个元素子元素的文档节点。

在XPath 2.0(和XSLT 2.0)中,可以构造树,其中树的根可以是任何类型的节点,例如,可以有一个没有父元素的元素。因此术语发生了变化:“根”现在是一个没有父节点的节点(任何类型),而我所说的代表整个文档的“容器”现在被称为“文档节点”。

但是,无论您使用的是XPath 1.0还是2.0,/*都匹配元素,并且匹配其父节点,即树的根。

 类似资料:
  • 我是XSLT新手。我想根据其他子节点的条件更改XML中的根节点。但子节点始终保持不变。例如,我有以下XML: 我喜欢将XML更改为: 这意味着依赖于<代码> 我不想在每个<代码>

  • 我有一个XML: 我想向根元素:/doc添加一个属性(名称空间),以便输出如下所示: 我尝试了三种xslt(跳过了默认的“复制所有”部分以减少问题的长度)。 xslt1:见下文,问题在于将空名称空间xmlns=”“添加到/doc的所有子节点(即:/doc/tag1和/doc/tag2) Xslt2:见下文,问题是“ns”被添加到根节点:和 xslt3:请参见下文,问题是报告了错误:未定义名称空间前

  • 我正在尝试处理这个XML文件,我想根据最新的节点值删除所有匹配的节点。在以下示例中,最新节点值为“${DELETE}”,最新节点值将始终为“${DELETE}”,并且该节点将始终位于XML文件的底部。 示例: 预期产出为:

  • 我有一个XML文件: 我想使用XSLT将其转换为have: 我的文件: 但是我的输出文件中没有根节点。如何做到这一点? 还有,这是一个好的方法来进行转换吗?堆叠几个模板?

  • 我需要添加/删除一些前缀节点。例如节点->或节点->或节点->....有更多的节点xml输入,但我只放了几个。 我需要在节点响应中包含ns1,因为当我导入到SAP PO时,它会说“ns1未声明”。我想我给节点添加了ns1前缀,但我不知道。我尝试在测试SAP中手动将ns1包含在节点中并进行操作。在其他转换xslt之后,只有我需要所有xml的节点响应来映射。 这是im使用的xslt: