Как предотвратить xml.ElementTree fromstring из dropdown commentnode

У меня есть следующий фрагмент кода:

from xml.etree.ElementTree import fromstring,tostring mathml = fromstring(input) for elem in mathml.getiterator(): elem.tag = 'm:' + elem.tag return tostring(mathml) 

Когда я вводим следующий input :

 <math> <a> 1 2 3 </a> <b /> <foo>Uitleg</foo> <!-- <bar> --> </math> 

Это приводит к:

 <m:math> <m:a> 1 2 3 </m:a> <m:b /> <m:foo>Uitleg</m:foo> </m:math> 

Как так? И как я могу сохранить комментарий?

edit : Мне не нужна конкретная библиотека xml, однако, я должен иметь возможность делать вставленные изменения в теги. К сожалению, lxml, похоже, не позволяет этого (и я не могу использовать правильные операции с пространством имен)

  • Как я могу обрабатывать xml асинхронно в python?
  • Разбор файла YAML в Python и доступ к данным?
  • Выясните, где CDATA находится в элементе lxml?
  • Анализ большого XML-файла с помощью Python lxml и Iterparse
  • Почему elementtree.ElementTree.iterparse использует так много памяти?
  • Lazy SAX XML-анализатор с остановкой / возобновлением
  • Python lxml - получить индекс текста тега
  • Разбор большого RDF в Python
  • One Solution collect form web for “Как предотвратить xml.ElementTree fromstring из dropdown commentnode”

    Вы не можете использовать xml.etree , потому что его синтаксический анализатор игнорирует комментарии (что является приемлемым поведением для XML-парсера, кстати). Но вы можете, если используете (совместимую) библиотеку lxml , которая позволяет настраивать параметры парсера .

     from lxml import etree parser = etree.XMLParser(remove_comments=False) tree = etree.parse('input.xml', parser=parser) # or alternatively set the parser as default: # etree.set_default_parser(parser) 

    Это было бы самым простым вариантом. Если вам действительно нужно использовать xml.etree, вы можете попробовать подключить свой собственный парсер, хотя даже тогда комментарии официально не поддерживаются: посмотрите на этот пример (от автора xml.etree) (по-видимому, работает в python 2.7 кстати)

    Python - лучший язык программирования в мире.