Комментарии в XML в начале документа - PullRequest
4 голосов
/ 11 июня 2010

мой синтаксический анализатор PYTHON xml завершается ошибкой, если в начале XML-файла есть комментарий, например ::

<?xml version="1.0" encoding="utf-8"?>
<!-- Script version: "1"-->
<!-- Date: "07052010"-->
<component name="abc">
<pp>
    ....
</pp>
</component>

Это незаконно, чтобы разместить комментарий, как это?

EDIT:

хорошо, это не выдает ошибку, но модуль DOM выйдет из строя и не распознает дочерние узлы:

import xml.dom.minidom as dom
sub_tree = dom.parse('xyz.xml')
for component in sub_tree.firstChild.childNodes:
    print(component)

Я не могу получить доступ к дочерним узлам; sub_tree.firstChild.childNodes возвращает пустой список, но если я удаляю эти 2 комментария, я могу пройтись по списку и читать дочерние узлы как обычно!

EDIT:

Ребята, этот простой пример работает и этого достаточно, чтобы разобраться. запустите вашу оболочку Python и выполните этот небольшой код выше. Как только он ничего не выдаст, а после удаления комментариев появится узел!

Ответы [ 4 ]

1 голос
/ 12 июня 2010

Если вы сделаете это:

import xml.dom.minidom as dom
sub_tree = dom.parse('xyz.xml')
print sub_tree.children

Вы увидите, в чем ваша проблема:

>>> print sub_tree.childNodes
[<DOM Comment node " Script ve...">, <DOM Comment node " Date: "07...">, <DOM Element: component at 0x7fecf88c>]

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

Или вы можете отказаться от модели DOM и использовать ElementTree , с которой гораздо приятнее работать. :)

1 голос
/ 11 июня 2010

Это законно;из XML 1.0 Ссылка :

2.5 Комментарии

[Определение: комментарии могут появляться в любом месте документа вне другой разметки;кроме того, они могут появляться в объявлении типа документа в местах, разрешенных грамматикой.Они не являются частью символьных данных документа;XML-процессор МОЖЕТ, но не обязан, позволять приложению получать текст комментариев.Для совместимости строка «-» (двойной дефис) НЕ ДОЛЖНА встречаться в комментариях.] Ссылки на объекты параметров НЕ ДОЛЖНЫ распознаваться в комментариях.

1 голос
/ 12 июня 2010

Чтобы получить лучшие ответы, покажите нам (а) небольшой законченный скрипт на Python и (б) небольшой полный XML-документ, который вместе демонстрирует неожиданное поведение.

Рассматривали ли вы использование ElementTree?

0 голосов
/ 11 июня 2010

Это должно быть допустимо, если объявление XML находится в первой строке.

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