我如何禁止另一个节点?

时间:2014-05-29 01:27:44

标签: xslt

我有以下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>根本没有相同。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的if测试未测试您的想法。尝试此测试以查看匹配的元素是否具有特定名称:

<xsl:if test="self::d"/>

或者这个不太优雅的解决方案:

<xsl:if test="name() = 'd'"/>

或者,您只需添加d元素的模板,其行为与其他元素不同。