使用我在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>
我见过使用某个值删除一个特定元素的示例,但是如何将任何元素与某个值匹配?
答案 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')
]"/>