Paul Oyster
Paul Oyster

Reputation: 1248

Finding top-level xml comments using Python's ElementTree

I'm parsing an xml file using Python's ElementTree, like that:

et = ElementTree(file=file("test.xml"))

test.xml starts with a few lines of xml comments.

Is there a way to get those comments from et?

Upvotes: 3

Views: 3146

Answers (2)

Andrey Zabolotnyi
Andrey Zabolotnyi

Reputation: 123

Yes, there is a way.

from xml.etree import ElementTree

def parseXml (fn):
    try:
        target = ElementTree.TreeBuilder (insert_comments=True)
        parser = ElementTree.XMLParser(target=target, encoding='utf-8')
        et = ElementTree.parse (fn, parser)
    except Exception as e:
        print ("%s: %s" % (fn, str (e)))
        return

    for el in et.getroot ():
        print (el)

Same applies to processing instructions (ElementTree.PI), they will be inserted into the resulting structure only if insert_pis=true.

Upvotes: 0

f3lix
f3lix

Reputation: 29877

For ElementTree 1.2.X there is an article on Reading processing instructions and comments with ElementTree (http://effbot.org/zone/element-pi.htm).


EDIT:

The alternative would be using lxml.etree which implements the ElementTree API. A quote from ElementTree compatibility of lxml.etree :

ElementTree ignores comments and processing instructions when parsing XML, while etree will read them in and treat them as Comment or ProcessingInstruction elements respectively.

Upvotes: 4

Related Questions