MS Word разбивает слова в своем формате XML
Вопрос
У меня есть документ Word 2003, сохраненный как XML в формате WordProcessingML. Он содержит несколько заполнителей, которые будут динамически заменены подходящим контентом. Но проблема в том, что слово, казалось бы, случайно расщепляет их в отдельных словах. Например, вместо этого:
<w:t>${dl.d.out.ecs_rev}</w:t>
У меня есть это:
...
<w:t>${</w:t>
</w:r>
<w:r wsp:rsidR="005D11C0">
<w:rPr>
<w:sz w:val="20" />
<w:sz-cs w:val="20" />
</w:rPr>
<w:t>dl.</w:t>
</w:r>
<w:r wsp:rsidRPr="00696324">
<w:rPr>
<w:sz w:val="20" />
<w:sz-cs w:val="20" />
</w:rPr>
<w:t>d.out.ecs_rev}</w:t>
...
Есть ли способ сохранить «чистый» XML -документ, используя Word 2003, или существует какое -либо решение, которое может сделать очистку?
Я попытался запрограммировать метод на Java, который будет объединенным разделенными частями заполнителей, но поскольку количество различных комбинаций реза проблема для себя.
Решение
Вы можете использовать Aspose.words и вызвать это:
Document.joinrunswithsameformatting.
Другие советы
Если у вас есть контроль над исходными документами Word, вы можете остановить слово в вставке RSID и выделить грамматику/орфографические ошибки.
Word.Options opts = Word.Options;
opts.CheckGrammarAsYouType = false;
opts.CheckGrammarWithSpelling = false;
opts.CheckSpellingAsYouType = false;
opts.StoreRSIDOnSave = false;
Слова все еще будут разделены, если, например, вы измените шрифт на размер слова.
Хм, у меня есть простой+уродливый кусочек XSLT, который я использовал для очистки WordMl, как пример, который вы разместили. Я мог бы посвятить его DOCX4J, если хотите, но, как вы говорите, есть различные комбинации, которые не будут покрыты. В любом случае, если вы этого хотите, отправьте опубликуйте на форуме DOCX4J.
Более надежным подходом было бы извлечь простой текст и связать простой текст с XML, чтобы вы могли искать простой текст и перейти оттуда к XML.
Word 2003 XML необычайно сложный и трудно декодировать. Причина, по которой вы получаете несколько тегов, заключается в том, что Word ML генерирует теги, называемые Runs (TAG W: R). Насколько я знаю, нет простого способа сделать чистку XML выше. Я бы порекомендовал использовать HTML вместо WordMl. Гораздо проще манипулировать и заменить своих заполнителей подходящим контентом. Если стоимость не является целью, используйте такой продукт, как Aspose. Он делает все для вас и прост в использовании.