如果child / child / node为空,则xslt删除最高级别的父级

时间:2012-09-19 16:41:56

标签: xml xslt

社区;

我在这里尝试过很多帖子来解决这个问题。我一直没有去。 感谢任何帮助。

我有以下XMl:

 <SD>
   <I>
     <B>
       <A>SomeData</A>
       <Is>
         <Id/>
         <Id/>
         <Id/>
         <Id/>
         <Id/>
         <Id/>
       </Is>
     </B>
     <S>
       <D></D>
     </S>
     <D>
     .....
     </D>
   </I>
 </SD>

如果I / S / D为空或空白,我需要删除。 因此,如果I / S / D为空,我应该只有

    <SD>
    </SD>

我已经尝试但是我没有得到理想的结果。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在评论中,您有这个匹配的模板

<xsl:template match="I[not(descendant::S/D='')]"/> 

但这会匹配元素,其中 S / D 不为空,这与您想要做的相反。你能做的就是这个

<xsl:template match="I[not(S/D!='')]"/>

这将匹配空的 S / D 元素,以及根本没有这样的元素的情况。

这是完整的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output omit-xml-declaration="yes" indent="yes"/>

   <xsl:template match="node()|@*">
      <xsl:copy>
         <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="I[not(S/D!='')]"/>
</xsl:stylesheet>

使用时,输出以下内容

<SD></SD>