1

次のようなソースノードに対して非常に単純な 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>

xslt スタイルシートでこのソース ノードを実行しています。xmlspy で一度実行すると、次の出力が得られます。

 <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 ファイルを使用してコマンド ラインでこれを実行すると、次の結果が得られました。

      <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をデバッグまたは提供する方法を提案できる専門家はいますか?

4

2 に答える 2

3

違いは、Altova XML プロセッサが混合コンテンツ内の空白を処理する方法によるものです。

XML ドキュメント内の空白

デフォルトでは、Altova XSLT 2.0 エンジンは、ソース XML ドキュメント内の境界空白のみのノードからすべての境界空白を削除します。この空白を削除すると、、、、および関数が返す値にfn:position()影響 fn:last()fn:count()ますfn:deep-equal()。詳細については、「XPath 2.0 および XQuery 1.0 関数」セクションの「XML ドキュメント内の空白のみのノード」を参照してください。

AltovaXML は、空白のみのコンテンツを持つ要素間の「境界空白」テキスト ノードを取り除きます。

境界空白のみのテキスト ノードは、混合コンテンツの要素内の 2 つの要素間に発生する子の空白のみのテキスト ノードです。

lwburk が彼の回答で示唆したように、スタイルシートに次を追加することで、他のプロセッサに同じことを行うように指示できます。

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

ただし、AltovaXML でスペースを保持することはできません。これは、スペースが実装されていない xsl:preserve-spacexsl:strip-space、常に削除されるためです。

于 2011-12-30T00:03:22.460 に答える
1

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

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

これは、スタイルシートの最上位にある必要があります (ルートxsl:stylesheet要素の子として)。

于 2011-12-29T21:48:48.627 に答える