-2

社区;

我在这里尝试了很多帖子来解决这个问题。我一直没有去哪里。任何帮助表示赞赏。

我有以下 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>

我已经尝试过,但没有得到想要的结果。

任何帮助深表感谢。

4

1 回答 1

1

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

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

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

<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>
于 2012-09-20T09:52:33.067 回答