2017-08-04 42 views
0

XSLを使用して不要なスペースエレメントを削除します。私がテストだ不要なスペースエレメントを削除する必要があります

XML:私が使用

<Body> 
    <h1>abc</h1> 
    <h1>efg</h1> 
    <p>efgh</p> 
    <h1> </h1> 
</Body> 

は、XSL:

<xsl:template match="Body"> 
    <xsl:copy> 
     <xsl:for-each-group select="*" group-adjacent="boolean(self::h1)"> 
     <xsl:choose> 
      <xsl:when test="current-grouping-key()"> 
       <h1> 
        <xsl:apply-templates select="current-group()/node()"/> 
       </h1> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:apply-templates select="current-group()"/> 
      </xsl:otherwise> 
     </xsl:choose> 
     </xsl:for-each-group> 
    </xsl:copy> 
</xsl:template> 

私が手出力:

<Body> 
    <h1>abcefg</h1> 
    <p>efgh</p> 
    <h1> </h1> 
</Body> 

私は希望の出力:

<Body> 
    <h1>abcefg</h1> 
    <p>efgh</p> 
</Body> 

スペース値を持つ要素を削除する必要があります。お知らせ下さい。事前にありがとう

+0

入力がどのように見えるか、どのような結果が得られるかを詳しく説明する必要があると思います。最後の 'h1'要素は空ではなく、空白で埋められますが、何らかのデータが入っていますか? 'h1'要素の新しいグループにしますか? –

答えて

0

私はあなたのXSLドキュメントを書いた方法で、h1要素だけをマージすると仮定しています。私はさらにあなたがと仮定して、 "blank" h1要素を削除したいと考えています。私を紹介するために拡張XML入力で

<xsl:strip-space elements="h1" /> 
<xsl:template match="Body"> 
    <xsl:copy> 
    <xsl:for-each-group select="*" group-adjacent="boolean(self::h1)"> 
     <xsl:choose> 
     <xsl:when test="current-grouping-key()"> 
      <xsl:if test="string-length(current-group()) > 0"> 
      <xsl:copy> 
       <xsl:apply-templates select="current-group()"/> 
      </xsl:copy> 
      </xsl:if> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:for-each select="current-group()"> 
      <xsl:copy> 
       <xsl:apply-templates/> 
      </xsl:copy> 
      </xsl:for-each> 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:for-each-group> 
    </xsl:copy> 
</xsl:template> 

:(。これらの仮定のいずれかが真でない場合、それは非常に簡単な修正です)を念頭に置いて

、ここで必要な出力を達成するための一つの方法です仮定:

<Body> 
    <h1>abc</h1> 
    <h1>efg</h1> 
    <p>efgh</p> 
    <p>ijkl</p> 
    <h2>mnop</h2> 
    <h1> </h1> 
    <p> </p> 
</Body> 

出力は次のとおりです。

<Body> 
    <h1>abcefg</h1> 
    <p>efgh</p> 
    <p>ijkl</p> 
    <h2>mnop</h2> 
    <p> </p> 
</Body> 

への鍵解決策は、string-length()機能と結合されたxsl:strip-space要素です。これは、実際には、のすべてのh1要素のいずれかが、唯一の空白の削除された量のになります。

また、第2のxsl:apply-templates要素で大きなバグが修正されました。その結果、連続していないすべての要素が裸で結合されていました。 (これを避けるには、current-group()ノード内のすべてのノードをループする必要があります)。

+0

ありがとう@robin。その実用的な罰金 – User501

関連する問題