XSLT 映射,用于在 Child 为空或缺失时删除父元素



如果所有 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>

相关内容

  • 没有找到相关文章

最新更新