Сохранение перевода строки и т. Д. В текстовом содержимом XSL, но не в самих тегах - PullRequest
5 голосов
/ 07 февраля 2011

При создании документа 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>";

Это текст, который я использую в качестве ввода. Он преобразован в XML-документ на Java. Обратите внимание на \ 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>

Так что он показывает разрыв строки прямо перед текстовым содержимым, что нормально.

Я использую Apache FOP, чтобы преобразовать это в файл 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>

Тогда мой вывод в порядке и, как я и ожидал:

это какой-то кастом
содержание

Очевидно, что я не хочу, чтобы эти дополнительные разрывы строк исходили от самих элементов, но я действительно хочу сохранить перевод строки из текстового содержимого. Есть ли способ сделать это? Или есть альтернативное решение для сортировки разрывов строк?

Ответы [ 2 ]

5 голосов
/ 07 февраля 2011

Довольно грубый обходной путь, пока вы не найдете что-то лучшее.

<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>

Таким образом, вы можете сохранить хотя бы часть вашего исходного кода.

1 голос
/ 07 февраля 2011

<xsl:output method="xml" indent="no"/> в вашем XSLT должен удалить все отступы тега из вашего вывода.

...