【发布时间】:2010-06-10 04:11:08
【问题描述】:
当满足某个条件到使用 XSLT 的 xml 文档时,我无法将文本块插入。假设我有以下 xml:
<oldStep Name="Step1">
<oldItems>
<oldItem ItemName="item1">
</oldItem>
<!-- want to add an extra <Item> here if Step Name == "Step1" -->
<oldItem ItemName="Step1item">
</oldItem>
</oldItems>
</oldStep>
<oldStep Name="Step2">
<oldItems>
...
</oldItems>
</oldStep>
在将旧节点名称转换为新节点名称的过程中,只要 oldStep Name 等于某个值(在本例中为 Step1),我想添加一个额外的文本块(或手动构建的节点)。我尝试使用以下 XSLT,但是一旦匹配,它就会在将文本块添加到 xml 中的每个节点(有时甚至不在节点下)时出现奇怪的行为。另外,我在跳过节点时遇到问题,因此可以将节点插入到项目中,而不是直接在 oldStep 下:
<xsl:template match="oldItems">
<xsl:element name="Item">
<xsl:if test="../@Name = 'Step1'>
<xsl:call-template name = "identity"></xsl:call-template>
</xsl:if>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="node()" name="identity">
<xsl:element name="Item">
<xsl:attribute name="ItemName">Step1item</xsl:attribute>
</xsl:apply-templates />
</xsl:element>
</xsl:template>
我觉得我弄错了条件,但谷歌搜索并没有真正帮助(搜索字符串太模糊)。我在 xsl 中缺少什么?或者,有没有更好的方法来解决这个问题?
谢谢。
【问题讨论】:
-
好问题 (+1)。请参阅我的答案以获得完整的解决方案。