2011-12-29 8 views
1

私は次のようにソースノードのための非常に単純なXSLTをしています:なぜxsltを実行して別の出力が得られますか?

<para> 
     <media type="photo" source="lr002662" rights="licensed"> 
      <resource.title>Logging in Canada</resource.title> 
     </media>Logging is cutting down trees for <italic>lumber</italic> (wood). Loggers are also called <italic>lumberjacks.</italic> 
    </para> 

:私は一度のXMLSpyで、私は次の出力を得た、私のXSLTスタイルシートの上にこのソースノードを実行しています

<p> 
     <media type="photo" id="lr002662" rights="licensed"> 
      <title>Logging in Canada</title> 
     </media>Logging is cutting down trees for <definition> 
      <word-term>lumber</word-term> 
      <word-definition>wood</word-definition> 
     </definition>. Loggers are also called <i>lumberjacks.</i> 
    </p> 

 <para> 
     <media type="photo" source="lr002662" rights="licensed"> 
      <resource.title>Logging in Canada</resource.title> 
     </media>Logging is cutting down trees for 
      <italic>lumber</italic> 
      (wood) 
     . Loggers are also called <italic>lumberjacks.</italic> 
    </para> 

あなたが見ることができるように、テキストの後方に:し​​かし、私は同じXSLTスタイルシートを使用してsaxon9he.jarファイルを使用してコマンドラインでこれを実行して、私は次のようになりましたそれで、メディアタグにはその中に非常に多くのキャリッジリターンが含まれています。これは私が望むものではありません。私はこの問題に気付かなかったXMLSpyを使っています。任意の専門家が私のxsltをデバッグする方法を提案できますか?

答えて

1

改行がソースにあるため、特に削除されていない限り、改行の出力にそれらが表示されると思います。あなたは使用して、すべての空白のみのテキストノードを取り除くことができます。

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

これは(ルートxsl:stylesheet要素の子として)あなたのスタイルシートのトップレベルにする必要があります。

+0

もっと正確には、「その他のスペース」ではなく、空白のみのテキストノードです。 –

+0

@あなた、XMLSpyで正しく表示されている理由はありますか? – Kevin

+0

@DimitreNovatchev - 確かに。更新しました。 –

3

違いがあるによるXML文書内the manner in which the Altova XML processor handles whitespace in mixed content.

空白にデフォルトで

、ソースXMLにおける境界空白専用ノードからのAltova XSLT 2.0エンジンストリップ全境界空白 資料。 この空白を削除すると、fn:position(), fn:last(),fn:count()、およびfn:deep-equal()の関数が返されます。 の詳細については、XPath 2.0 のWhitespace-only Nodes in XML DocumentおよびXQuery 1.0関数のセクションを参照してください。

境界空白のみのテキストノードが発生子空白テキストのみ ノードである:

AltovaXMLは、空白のみのコンテンツを持っている要素間の「境界空白」テキストノードを取り除き混合要素の中の2つの要素の間にある。 コンテンツ。

lwburkは、あなたのスタイルシートに以下を追加することによって、同じことを行うために他のプロセッサに指示することができ、彼の答えで示唆したように:

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

しかし、あなたはAltovaXMLスペースbecause they have not implemented xsl:preserve-space or xsl:strip-spaceを維持するために取得することはできません常にそれらを取り除くでしょう。

+0

+1 - 良い答え。 –

+0

このチップのおかげで、同じ問題が発生しました。 –

関連する問題