XSLT - Xpath中存在条件检查元素

时间:2015-07-23 08:55:37

标签: xml xslt xpath xslt-2.0

我有一个xml如下,

<doc>
  <a>
    <b></b>
  </a>
  <a></a>
  <a>
    <b></b>
  </a>
  <a>
    <c></c>
  </a>
  <a></a>
</doc>

我需要做的是,如果<a>有一个<b>子(一个或多个),请在<end>节点结束之前添加<a>标记。如果<a>没有<b>孩子什么也不做。

所以结果xml应该是,

   <doc>
      <a>
        <b></b>
        <end></end>
      </a>
      <a></a>
      <a>
        <b></b>
        <b></b>
        <end></end>
      </a>
      <a>
        <c></c>
      </a>
      <a></a>
    </doc>

我无法考虑如何有条件地检查xpath以检查<b>中是否存在<a>子项。

我不能用,

 <xsl:template match="a//b">
        <xsl:copy>
            <xsl:apply-templates select="@* | *"/> 
            <end></end>
        </xsl:copy>
    </xsl:template>

这会为每个<end>节点添加<b>个节点。

有任何建议我该怎么做?

提前致谢

1 个答案:

答案 0 :(得分:1)

您可以使用a[b]来匹配包含一个或多个孩子的<a> <b>

<xsl:template match="a[b]">
    <xsl:copy>
        <xsl:apply-templates select="@* | *"/> 
        <end></end>
    </xsl:copy>
</xsl:template>

或者a[.//b]如果您想要匹配具有一个或多个后代 <a>的{​​{1}}。