Python: lxml.etree.tostring (with_comments = False) - PullRequest
4 голосов
/ 30 июня 2011

Я вызываю следующую команду и получаю следующую ошибку:

>>>lxml.etree.tostring([tree].getroot(), with_comments=False)
ValueError: Can only discard comments in C14N serialisation

Я не знаю, что такое C14N, но я был бы признателен за объяснение того, как я могу добиться этого и выполнить вышеупомянутую команду с with_comments=False. (Да, я знаю, что могу удалить комментарии с помощью регулярных выражений. Пожалуйста, не предлагайте регулярные выражения в качестве решения.)

Справочная информация: Я хочу перенести документ xml по протоколу http. Я использую библиотеку lxml Python. Я работаю на Python 2.7.1

Ответы [ 2 ]

7 голосов
/ 22 сентября 2011

Вы можете удалить комментарии во время синтаксического анализа:

parser = etree.XMLParser(remove_comments=True)
tree = etree.parse(xmlfile, parser=parser)

Или при использовании objectify (это заняло у меня очень много времени):

parser = objectify.makeparser(remove_comments=True)
tree = objectify.parse(xmlfile, parser=parser)
1 голос
/ 30 июня 2011

Документ lxml.etree.tostring говорит:

Исключительные аргументы и аргументы with_comments используются только с выходом C14N, где они запрашивают эксклюзивную и незакомментированную сериализацию C14N соответственно.

Этот параметр действителен только при использовании method='c14n'. Вы можете опустить его, и, насколько я знаю, он не будет включать комментарии. Даже если это произойдет, анализатор xml на принимающей стороне должен их игнорировать, поэтому, если нет проблем с пропускной способностью или у вас нет особых проблем с этим, я бы не стал беспокоиться об этом.

...