XLST删除基于attributte的特定片段

时间:2017-11-02 19:22:01

标签: xml xslt

使用以下xml和xslt我想根据特定的数学和条件删除特定的片段。

XML

<root>
  <component>.....</component>
  <table> 
   <entry>
      <extra>....</extra> 
      <reference value="#MED_0"/>
   </entry>
   <entry>
      <extra>....</extra> 
      <reference value="#MED_1"/>
   </entry>
  </table>   
</root>

XSLT

<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template name="remove" match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>


<xsl:template match="*[name()='entry']">
    <xsl:if test="@value='#MED_0'">
        <xsl:call-template name="remove"/>
    </xsl:if>
</xsl:template>

当前结果

<root>
  <component>.....</component>
  <table> 
  </table>   
</root>

预期

<root>
  <component>.....</component>
  <table> 
   <entry>
      <extra>....</extra> 
      <reference value="#MED_1"/>
   </entry>
  </table>   
</root>

当我们使用XSLT版本1.0执行它时,它会删除所有条目,但我们只想删除所有条目,其值为“#MED_0”而不是值=“#MET_1”

任何想法?

1 个答案:

答案 0 :(得分:0)

您可以通过将元素与空模板匹配来删除元素:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="entry[reference[@value='#MED_0']]"/>

</xsl:stylesheet>