2017-08-08 4 views
0

を使用して空間要素の値を削除する必要があり、1種類は私はXML要素の2種類がありXSL

まずXMLです:

<Body> 
<h1>aaa</h1> 
<h1>bbb</h1> 
<h1>ccc</h1> 
</Body> 

セカンドXML:私は「

<Body> 
<h1> </h1> 
<h1>aaa</h1> 
<h1>bbb</h1> 
</Body> 

XSL mを使用して

<xsl:strip-space elements="h1"/> 

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

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

    <xsl:template match="h1"/> 

出力I'm geなどの最初のXMLに正しくめの設定:

<Body> 
<h1>aaa bbb ccc</h1> 
</Body> 

しかし、たとえ、私は2番目のXMLのためのH1としてストリップ空間要素を使用し、私は以下のように取得しています:出力は

ようなこと期待

<Body> 
<h1> aaa bbb</h1> 
</Body> 

<Body> 
<h1>aaa bbb</h1> 
</Body> 

h1のスペース要素を削除する必要があります。しかし、そのタグのために、そのスペースを組み合わせても。私は優先度を使用し、テンプレートでも別のh1 [normalize-space()]タグを使用しました。しかし、それは動作しません。これを避ける方法があります。提案してください。私はXSLT 2.0とsaxon-PE 9.6.0.7を使用しています。事前に感謝

答えて

0

h1のスペース要素を削除する必要があります。あなたが見る

スペースがない最初h1要素内のスペースです。これは、最初のh1の空文字列と2番目のh1要素の"aaa"文字列の間の区切り文字です。あなたは行って、これを確認することができます

<xsl:template match="Body"> 
     <xsl:copy> 
     <h1><xsl:value-of select="h1" separator="-"/></h1> 
     </xsl:copy> 
</xsl:template> 

デモ:http://xsltransform.net/pNmBy1v

は(私はこれを書いていた間、マーティンHonnenにより示唆されるように)、あなたは空のh1要素を除外することができ、余分なスペースを削除、またはnormalize-space()を適用するにはその結果に。

+0

Thanks @Michaelこのタグのためにうまく動作します。私はこのタグを使用しました

User501

1

<h1><xsl:value-of select="h1"/></h1>の代わりに<h1><xsl:value-of select="h1[normalize-space()]"/></h1>を使用すると簡単に修正する必要がありますと思います。

+0

ありがとう@Martin Honnen。このタグのために正常に動作しています

User501

関連する問題