【发布时间】:2018-11-21 03:19:14
【问题描述】:
全部,
我一直在使用这篇文章最底部的非常基本的样式表来从 XML 记录中删除空元素节点。 XSLT 充分地完成了这项工作,但 XML 记录实际上在样式表未删除的某些元素中包含文字“空”值。示例:
<marc:datafield tag="400" ind1="1" ind2=" ">
<marc:subfield code="a">null</marc:subfield>
<marc:subfield code="q">null</marc:subfield>
<marc:subfield code="d"></marc:subfield>
</marc:datafield>
在运行 XSLT 之前,我一直在使用查找和替换手动删除这些“空值”,这是一个运行良好的过程 - 但让 XSLT 本身删除这些值以及任何其他值会更明智空节点。换句话说,我想去掉包含“null”的节点
<marc:subfield code="q">null</marc:subfield>
AND 类似的节点
<marc:subfield code="q"></marc:subfield>
因此,此消息中顶部示例中表示的整个节点块完全消失。
下面的 XSLT 成功地删除了具有文字“null”值的节点,但它保留了空节点。我需要 XSLT 同时做这两件事:删除文字“空”值和包含它们的节点以及空节点。我试过做一个“否则选择”条件,但它不起作用。
<xsl:strip-space elements="*"/>
<xsl:template match="*[not(node())]"/>
<xsl:template match="node()|@*">
<xsl:if test="(. != '') and (. != 'null')">
<xsl:copy>
<xsl:apply-templates select="node()[normalize-space()]|@*"/>
</xsl:copy>
</xsl:if>
</xsl:template>
您能提供的任何帮助将不胜感激。
问候,非常感谢--
Sed V.
原始 XSLT:
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" media-type="text/xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[not(node())]"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()[normalize-space()]|@*"/>
</xsl:copy>
</xsl:template>
【问题讨论】:
标签: xslt