如果所有 TDLINE 标签都为空或不存在E1EDPT1我需要删除该元素。我尝试过但没有工作。
<E1EDPT1 SEGMENT="">
<TDID>Z014</TDID>
<TSSPRAS>EN</TSSPRAS>
</E1EDPT1>
<E1EDPT1 SEGMENT="">
<TDID>Z002</TDID>
<TSSPRAS>EN</TSSPRAS>
</E1EDPT1>
<E1EDPT1 SEGMENT="">
<TDID>Z012</TDID>
<TSSPRAS>EN</TSSPRAS>
</E1EDPT1>
<E1EDPT1 SEGMENT="">
<TDID>Z011</TDID>
<TSSPRAS>EN</TSSPRAS>
<E1EDPT2 SEGMENT="">
<TDLINE></TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="">
<TDLINE>Hello</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
</E1EDPT1>
输出应如下所示。
<E1EDPT1 SEGMENT="">
<TDID>Z011</TDID>
<TSSPRAS>EN</TSSPRAS>
<E1EDPT2 SEGMENT="">
<TDLINE>Hello</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
</E1EDPT1>
任何帮助,不胜感激。
谢谢莫汉
根据您所需的输出,我认为如果它是子节点或后代为空,则无需删除整个E1EDPT1
节点。
试试下面的样式表:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- delete E1EDPT1 node if it has an empty TDLINE child
or if it does not have any descendant TDLINE -->
<xsl:template match="E1EDPT1[TDLINE = '' or (count(descendant::TDLINE[. != '']) = 0)]"/>
<xsl:template match="E1EDPT2[TDLINE = '' or not(TDLINE)]"/>
</xsl:stylesheet>