XSLT 删除 XML 中的元素



有人可以解释如何使用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')]" />

相关内容

  • 没有找到相关文章

最新更新