2012-05-22 5 views
17

私はXSLTを使用してXML文書で非常に簡単な変換を行っています。私は、特定の名前を持つすべての要素ノードを削除したいだけです。 私のソース・ドキュメントでは、これらのノードはすべて文書の最後にありますが、変換後は、意図したとおりにノードが消えてしまっていますが、代わりに空の行がたくさんあります。XSLTを使用してノードを削除した後で空行に乗る

これは私が変換で欲しいものを達成したのではなく、好奇心を払って抜け出したものです。 これは私が(私は削除したい要素が名前の「関係」である)形質転換のために使用されるXSLファイルです:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" /> 

    <xsl:template match="*"> 
    <xsl:copy> 
     <xsl:copy-of select="@*" /> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="relation"/> 

</xsl:stylesheet> 

答えて

21

理由はへの即時の兄弟である空白のみのテキストノードであります削除された要素

ソリューション:単純に任意の空白のみのテキストノードを削除するには、このXSLT命令を追加 - 変換が開始される前であっても:

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

結果はインデントを失う可能性 - もしそうであれば、追加この:

<xsl:output omit-xml-declaration="yes" indent="yes"/> 

完全な変換が次のようになります。

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

    <xsl:template match="*"> 
     <xsl:copy> 
      <xsl:copy-of select="@*" /> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="relation"/> 
</xsl:stylesheet> 

このXMLドキュメント(なしはありません!)に適用される:

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 

    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
    <relation/> 
</nums> 

ザ・たかった、正しい結果(ノー末尾の空白)が生成されます

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 
+2

のみあなたがスタイルシートにxsl:strip-spaceを追加する前に、ソース文書に重要な空白テキストノードがないこと、つまり混在した内容の空白がないことを確認してください。 –

+1

には、「関係」ノードの兄弟にのみ空白を取り除きたいと言う方法がありますか? – Sergio

+1

@Sergio:はい:使用: '' –

関連する問題