繁体   English   中英

使用XSLT从XML删除没有属性的空节点

[英]Remove empty nodes with no attributes from XML using XSLT

输入XML:

 <?xml version="1.0" encoding="UTF-8"?>
<dataset>
<TEST ID="1" DATA="DATE"/>
<TEST/>
<TEST2 ID="3" COLUMN="VALUE"/>
</dataset>

所需输出:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<TEST ID="1" DATA="DATE"/>
<TEST2 ID="3" COLUMN="VALUE"/>
</dataset>

当前应用的XSLT:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*[not(child::node())]"/>
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

电流输出:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
</dataset>

在没有结果为空的'<TEST/>'节点的情况下实现输出的可能条件是什么?

检查以下代码

<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:template match="*[not(child::node())]"/>

至:

<xsl:template match="*[not(node() or @*)]"/>

请注意, child是默认轴,因此可以省略child::

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM