有人可以解释如何使用XSLT将输入XML转换为下面显示的输出XML吗?我需要删除 XML 中的"RElement",该元素的后代子元素中没有值为"帐户"的"类型"元素。 "RElement"是递归的。
输入 XML-
<RElement>
<Type>Group</Type>
<RElement>
<Type>Group</Type>
<RElement>
<Type>Account</Type>
</RElement>
</RElement>
<RElement>
<Type>Group</Type>
<RElement>
<Type>Group</Type>
<RElement>
<Type>Group</Type>
</RElement>
</RElement>
</RElement>
</RElement>
输出 XML-
<RElement>
<Type>Group</Type>
<RElement>
<Type>Group</Type>
<RElement>
<Type>Account</Type>
</RElement>
</RElement>
</RElement>
你可以试试这个:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="RElement[not(.//Type[text() = 'Account'])]" />
</xsl:stylesheet>
基本上,它是标识转换,带有一个空模板的 RElement 元素,该元素在其后代子元素中没有具有值为"帐户"的"类型"元素。
编辑以添加 Ian Robert 的空模板,这更好:
<xsl:template match="RElement[not(.//Type = 'Account')]" />