我有一个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>
个节点。
有任何建议我该怎么做?
提前致谢
答案 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}}。