XSLT删除XML中的元素

时间:2013-10-03 14:43:09

标签: xslt-1.0

有人可以解释如何使用XSLT将输入XML转换为下面显示的输出XML。 我需要在XML的子元素中删除没有'Type'元素的'RElement',其值为'Account'。     '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>

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

<?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元素的空模板,其后代子元素中没有值为'Account'的'Type'元素。

已编辑添加Ian Robert的空模板,这更好:

<xsl:template match="RElement[not(.//Type = 'Account')]" />