Проблема:
Когда пробел незначителен, представление может быть очень важным.
Объяснение:
В XML Schema Part 2: Datatypes Second Edition ограничивающий аспект whiteSpace определен для типов, производных от string (http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace). Если этот аспект whiteSpace имеет значение replace или collapse, значение может быть изменено во время нормализация.
В конце Раздел 4.3.6 есть примечание:
Обозначение #xA, используемое здесь (и в других местах в этой спецификации), представляет кодовую точку универсального набора символов (UCS) в шестнадцатеричной форме A (перевод строки), которая обозначается U+000A. Эту нотацию следует отличать от , которая является ссылкой символа XML на ту же кодовую точку UCS.
Пример:
Если тип данных для элемента elem имеет ограничение пробелы collapse, "<elem> text </elem>"
должно стать "text"
(начальные и конечные пробелы удалены), а "<elem> text </elem>"
должно стать " text "
(пробелы, закодированные ссылкой на символ, не удалены).
Вопросы:
Таким образом, либо синтаксический анализатор/построитель дерева обрабатывает эту нормализацию, либо это делается позже.
- Informed parsing:
- Where do I provide the parser or tree builder with the information on how to normalize some XML element?
- Есть что-то вроде
set_whitespace_normalization('./country/neighbor', 'collapse')
? - Есть ли в синтаксическом анализаторе или построителе дерева такой хук, как
normalize(content)
?
- Post processing
- How do I access the original content of some element?
- Есть ли
elem.original_text
, который может вернуть " text 
"? - Есть ли
elem.unnormalized_text
, который может вернуть "text
"?
Я хотел бы использовать Python xml.etree.ElementTree, но я рассмотрю любую другую XML-библиотеку, которая выполняет эту работу.
Отказ от ответственности:
Конечно, объявлять пробелы незначимыми (заменять или сворачивать) — плохой стиль, а затем обманывать, используя ссылки на символы. В большинстве случаев для предотвращения этого следует изменить либо данные, либо схему, но иногда вам приходится работать с иностранными XML-схемами и иностранными XML-документами. И само существование примечания, процитированного выше, указывает на то, что XML-редакторы знали об этой дилемме и сознательно не предотвращали ее.