N
Neil Cerutti
I have to parse many xml documents that senselessly(?) specify a
single namespace for the whole document. After a couple of years,
my approach has boiled down to the following three little
helpers, for use with ElementTree:
def insert_namespace(xpath):
# Enable *simple* xpath searches by inserting the fscking namespace.
return '/'.join('{{{}}}{}'.format(XMLNS, n) for n in xpath.split('/'))
def find(et, xpath):
return et.find(insert_namespace(xpath))
def findall(et, xpath):
return et.findall(insert_namespace(xpath))
Instead of writing, e.g.,
et.find('{{0}}ab/{{0}}cd'.format(XMLNS), et al, I can use
find(et, 'ab/cd').
Is there a better ElemenTree based approach I'm missing out on?
And on the other hand, am I circumventing something important, or
inviting bad limitations of some kind?
single namespace for the whole document. After a couple of years,
my approach has boiled down to the following three little
helpers, for use with ElementTree:
def insert_namespace(xpath):
# Enable *simple* xpath searches by inserting the fscking namespace.
return '/'.join('{{{}}}{}'.format(XMLNS, n) for n in xpath.split('/'))
def find(et, xpath):
return et.find(insert_namespace(xpath))
def findall(et, xpath):
return et.findall(insert_namespace(xpath))
Instead of writing, e.g.,
et.find('{{0}}ab/{{0}}cd'.format(XMLNS), et al, I can use
find(et, 'ab/cd').
Is there a better ElemenTree based approach I'm missing out on?
And on the other hand, am I circumventing something important, or
inviting bad limitations of some kind?