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>
.
我有一个 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>
.