2015-03-29 2 views
1

Я делаю замену строки в файле Word Docx с использованием OpenXML Power Tools и работает как ожидалось. Однако все вещи ломаются, когда у меня есть недопустимые символы в подстановке, такие как ampersand, поэтому, например, «Harry & Sally» сломается и приведет к недопустимому документу. Согласно this post незаконные символы должны быть преобразованы в xHHHH.OpenXML escaping незаконных символов

У меня возникли проблемы с поиском содержимого в предложении OOXML, упомянутом в сообщении, и, соответственно, с экранированием символов.

Я надеюсь, что у кого-то есть какой-то код или информация о том, какие символы нужно избегать. Я также надеялся, что OpenXML Power Tools может сделать это для меня каким-то образом, но я тоже не могу найти что-либо там.

+0

Если что-то не работает должным образом, у вас, вероятно, есть код для показа. Добавьте этот фрагмент кода к своему вопросу. – Neolisk

ответ

3

Спецификация просто говорит о стандартном наборе символов, которые должны быть экранированы в XML. Спецификация XML, упомянутая в связанной записи, - это номер из W3C, found here.

Существует пять символов, которые должны быть экранированы в любом месте, где они отображаются в XML-данных (имена, значения и т. Д.), Если они не являются частью раздела CDATA. В соответствии с разделом 2.4:

Амперсанд характер (&) и левая угловая скобка (<) не должны появляться в их буквальном виде, кроме случаев, когда используется в качестве ограничителей разметки или в комментарии, инструкции по обработке, или раздел CDATA. Если они необходимы в другом месте, они должны быть экранированы с использованием либо числовых символов, либо строк " &amp; " и " &lt; " соответственно. Прямоугольная скобка (>) может быть представлена ​​с использованием строки " &gt; " и должна быть совместима с экранированным " &gt; " или ссылкой на символ, когда она отображается в строке " ]]> " в содержимом, когда эта строка не обозначает конец CDATA.

Чтобы разрешить значения атрибутов содержать как одиночные и двойные кавычки, апостроф или одной кавычки (') может быть представлена ​​в виде " &apos; ", и двойной кавычки (") в качестве " &quot; ".

другими словами, побег из следующих символов:.

' -> &apos 
" -> &quot 
> -> &gt; 
< -> &lt; 
& -> &amp; 

как правило, вы бы не кодировать их как xHHHH, вы бы использовать XML-объекты, перечисленные выше, но либо позволен вы также не необходимость to en кодовые цитаты или скобки с прямым углом в каждом случае, только если они в противном случае представляли бы синтаксис XML, но обычно безопаснее делать это все время.

Спецификация XML также включает в себя список каждого символа Unicode, которые могут появляться в документе XML, в разделе 2.2:

Char :: = # x9 | #xA | #xD | [# x20- # xD7FF] | [# xE000- # xFFFD] | [# x10000- # x10FFFF]

Этот список включает в себя в основном каждый символ Юникода в базовой плоскости (каждый из которых вы можете запустить), за исключением управляющих символов. Разрешены только символы вкладки, CR и LF - любой другой символ, расположенный ниже ASCII 32 (пробел), должен быть экранирован.

Большой пробел в списке (0xD800-0xDFF) предназначен для суррогатных значений кодировки, которые не должны появляться сами по себе, так как они не являются допустимыми символами. Последние два, 0xFFFE и 0xFFFF, также являются недопустимыми.

+1

Возможно, вы захотите добавить отсутствующие полуколоны для апострофа и цитаты – TheEdge

Смежные вопросы