Сохранение новых строк и пробелов в WordProcessingML с использованием XSLT-преобразования

Я создаю текстовые документы программно с использованием WordprocessingML и не могу найти способ сохранить переводы строк в моих текстовых (w:t) блоках. Есть ответ, который не может сохранить пространство между запусками, которые адресуют пробелы:

t = new Text()
{
    Text = "your text with spaces ",
    Space = SpaceProcessingModeValues.Preserve
};

Однако я использую файл JavaScript, который создает структуру каталогов файла docx и выполняет преобразование xslt в исходном файле xml для создания основного файла document.xml, который использует это слово. Я не уверен, что у меня есть фактические низкоуровневые атрибуты WordprocessingML, которые соответствуют приведенному выше коду. Я пытался:

<w:t xml:space="preserve">
     Doesn't work.</w:t>

а также

<w:t w:space="preserve"> 
      Also, no joy.</w:t>

Можно ли это сделать или требуется несколько тегов абзаца (w: p)? Для простоты использования я бы предпочел, чтобы редакторы исходного XML-файла просто помещали нужные пробелы в один текстовый тег, вместо того, чтобы вручную добавлять дополнительные теги XML, такие как tab или абзац.

2 ответа

Если вы хотите добавить разрывы строк внутри абзаца, то вам нужно использовать w:br элемент, который нужно вставить в бег (w:r) элемент. Например, отображается следующая разметка Foo а также Bar с пустой строкой между ними.

<w:r>
  <w:t>Foo</w:t>
  <w:br/>
  <w:br/>
  <w:t>Bar</w:t>
</w:r>

Надлежащим атрибутом является xml:space="preserve", который можно найти, изучив правильно сконструированный тестовый файл docx, но он не позволяет переводить строки / изменять абзацы (он считает их как один пробел). Вкладки и пробелы работают внутри блоков w:t, но, к сожалению, мне пришлось использовать явный тег абзаца в моем исходном xml. Ответ в том, что это невозможно сделать (кроме как в фоновом режиме с вовлеченной обработкой строк, которая не будет стоить того).

Другие вопросы по тегам