使用XSLT从XML中删除具有特定值的任何元素

时间:2015-06-28 02:31:12

标签: xml xslt

使用我在Stack Overflow上找到的转换,我可以使用XSLT从XML中删除空标记:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match=
    "*[not(@*|*|comment()|processing-instruction())
     and normalize-space()=''
     ]"/>
</xsl:stylesheet>

我的问题是:如何删除具有特定值的任何元素?,例如我的XML也有默认的空白值,如:

          <BIRTHDATE>0000-00-00</BIRTHDATE>
          <DEATHDATE>0000-00-00</DEATHDATE>

我见过使用某个值删除一个特定元素的示例,但是如何将任何元素与某个值匹配?

2 个答案:

答案 0 :(得分:3)

对于字符串值与您要删除的字符串匹配的元素(“0000-00-00”),只需使用标识转换加上空覆盖:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="*[ not(*) and . = '0000-00-00']"/>

</xsl:stylesheet>

答案 1 :(得分:1)

表示空值为and normalize-space()=''的部分,您可以修改该部分以匹配空值或特定值,如下所示:

<xsl:template match=
    "*[not(@*|*|comment()|processing-instruction())
     and (normalize-space()='' or normalize-space()='PARTICULAR_VALUE_HERE')
     ]"/>