我是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
/
选择根节点,它是包含所有其他节点的文档节点。根元素由/*
选择。
你需要注意这里术语的变化。在我所知道的所有树模型中,有两个相关节点:一个表示元素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: