Разобрать атрибут элемента xml, используя minidom python - PullRequest
0 голосов
/ 26 декабря 2018

Мне нужно проанализировать xml, в котором есть элементы xml с атрибутами, значения которых могут быть многострочными с пробелами и переносами строк.

Я выполняю синтаксический анализ с использованием minidom, но значения многострочных атрибутов, которые я получаю, не имеют строкиперерывы.

Как получить такие значения с помощью минидома?Если не минидом, какая другая библиотека поддерживает такие атрибуты?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Согласно XML-Spec - 3.3.3 Нормализация значений атрибутов переводы строк не допускаются и заменяются пробелами.

Перед передачей значения атрибутаприложение или проверено на достоверность, процессор XML должен нормализовать значение атрибута, применяя приведенный ниже алгоритм или используя какой-либо другой метод так, чтобы значение, передаваемое приложению, было таким же, как и значение, полученное алгоритмом.

  1. Все разрывы строк должны быть нормализованы при вводе в #xA, как описано в 2.11 Обработка конца строки, поэтому остальная часть этого алгоритма работает с текстом, нормализованным таким образом.

  2. Начните с нормализованного значения, состоящего из пустой строки.

  3. Для каждого символа, ссылки на сущность или ссылки на символ в ненормализованном значении атрибута, начиная с первого ипродолжая до последнего, сделайте следующее:

    • Для ссылки на символ добавьте указанный символвведите нормализованное значение.

    • Для ссылки на сущность рекурсивно примените шаг 3 этого алгоритма к тексту замены сущности.

    • Для пробела (# x20, # xD, # xA, # x9) добавьте пробел (# x20) к нормализованному значению.

    • Для другого символа добавьте символ к нормализованному значению.

(выделено мной)

См. open "bug" xml.dom.minidom не пропускает символы CR, LF и TAB в пределах значений атрибута , а также)

0 голосов
/ 26 декабря 2018

Это не вопрос minidom или чего-то еще.Это XML стандарт, который сообщает, что значение атрибута

Для символа пробела (# x20, #xD, #xA, # x9) добавьте символ пробела (# x20) кнормализованное значение

https://www.w3.org/TR/2008/REC-xml-20081126/#attdecls

Это означает, что вы никогда не найдете символы \n (перевод строки), \r (возврат каретки) или \t (табуляция) взначение атрибута XML, по крайней мере, если ваш синтаксический анализатор следует правилам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...