【发布时间】:2011-07-20 15:11:56
【问题描述】:
我刚写了一个 XSLT,一开始没用。
我不得不将<Recordset> 的所有子代重命名为<C>:
<?xml version="1.0" encoding="utf-8"?>
<Record>
<Recordset>
<company>102</company>
<store>1801</store>
....
</Recordset>
<Recordset>
....
</Recordset>
</Record>
我使用了以下 XSLT:
<xsl:template match="Record/Recordset/child::*">
<xsl:element name="C">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
它可以工作并将<Recordset> 的所有子代重命名为<C>。
但首先我在模板中的匹配是这样的:
<xsl:template match="Record/Recordset/child::node()">
我的想法是<Recordset> 的每个孩子都是一个节点,因此node() 是合适的。
它也有效,但它为每个孩子插入了一个额外的<C/>。
child::node() 和 child::* 有什么区别?
【问题讨论】:
-
"我的想法是
的每个子节点都是一个节点" >> 这句话是正确的,但是您忘记了文本节点子节点,即使它们是在你的例子中只有空格。其他不是元素的子节点也是节点:cmets 和处理指令。命名空间节点和属性节点被特殊对待。 -
感谢亚伯的评论。在此期间我已经想通了。
标签: xslt