-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 に答える