我有以下xml:
<a>
<b>something</b>
<c>something</c>
<d>something</d>
</a>
以下xslt,它应该将名称空间加到<a>
中的节点前面:
<xsl:template match="a">
<a>
<xsl:apply-templates>
</a>
</xsl:template>
但是,让我们说我不想让xml包含<d>
类型的节点。如果是这种情况,我想终止。以下不承认工作:
<xsl:template match="a/*">
<xsl:if test="d">
<xsl:message terminate="yes">ERROR</xsl:message>
</xsl:if>
<xsl:element name="x:{name()}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
上面的代码似乎与<xsl:if>
根本没有相同。我做错了什么?
答案 0 :(得分:1)
您的if
测试未测试您的想法。尝试此测试以查看匹配的元素是否具有特定名称:
<xsl:if test="self::d"/>
或者这个不太优雅的解决方案:
<xsl:if test="name() = 'd'"/>
或者,您只需添加d
元素的模板,其行为与其他元素不同。