5

XSLドキュメントを作成しているときに、次の問題が発生しました。元のテキストの改行を保持したいので、を設定しlinefeed-treatment="preserve"ました。ただし、これは明らかに、テキストコンテンツの外部および実際のxml要素内の改行を保持することも意味します。例:

String content = "<fo:block white-space-collapse=\"true\" ><fo:inline>this is some </fo:inline><fo:inline font-weight=\"bold\">custom</fo:inline><fo:inline> \ncontent</fo:inline></fo:block>";

これは私が入力として使用するテキストです。Javaでxmlドキュメントに変換されます。改行を示すコンテンツの直前の\nに注意してください。これにより、FOドキュメントに次の出力が表示されます。

<fo:block white-space-collapse="true" linefeed-treatment="preserve">
  <fo:inline>this is some</fo:inline>
  <fo:inline font-weight="bold">custom</fo:inline>
  <fo:inline> 
content</fo:inline>
</fo:block>

したがって、テキストコンテンツの直前に改行が表示されます。

私はApacheFOPを使用してこれをPDFファイルに変換し、別のサードパーティライブラリを使用してこれをDocXファイルに変換します。どちらの場合も、コンテンツは次のように表示されます。

これはいくつかの
習慣です

コンテンツ

XSLを手動で変更し、次のようにすると、次のようになります。

<fo:block white-space-collapse="true" linefeed-treatment="preserve"><fo:inline>this is some </fo:inline><fo:inline font-weight="bold">custom</fo:inline><fo:inline> 
content</fo:inline></fo:block>

その後、私の出力は正常であり、私が期待するように:

これはいくつかのカスタム
コンテンツです

明らかに、これらの追加の改行が要素自体から発生することは望ましくありませんが、テキストコンテンツからの改行を保持したいのです。これを行う方法はありますか?または、改行を並べ替える別の解決策はありますか?

4

2 に答える 2

5

より良いものが見つかるまで、かなり大雑把な回避策。

<fo:block white-space-collapse="true" linefeed-treatment="preserve"
  ><fo:inline>this is some</fo:inline
  ><fo:inline font-weight="bold">custom</fo:inline
  ><fo:inline> 
content</fo:inline
></fo:block>

このようにして、少なくともソースコード形式の一部を保持できます。

于 2011-02-07T13:06:47.793 に答える
1

<xsl:output method="xml" indent="no"/>XSLTで、出力からすべてのタグインデントを削除する必要があります。

于 2011-02-07T11:43:57.410 に答える