XSLT - 有条件地检查 Xpath 中是否存在元素

XSLT - conditionally check element exist in Xpath

我有一个 xml 如下,

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

我需要做的是,如果 <a> 有一个 <b> child(一个或多个),在 <a> 结束之前添加 <end> 标签=]节点。如果 <a> 没有 <b> child 什么都不做。

所以结果 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> child 是否存在于 <a>.

中的方法

我不能用,

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

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

有什么建议吗?

提前致谢

您可以使用 a[b] 来匹配具有一个或多个 child <b> :

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

或者 a[.//b] 如果你想匹配 <a> 有一个或多个 descendant <b>.