Skip to content Skip to sidebar Skip to footer

Alter Namespace Prefixing With Elementtree In Python

By default, when you call ElementTree.parse(someXMLfile) the Python ElementTree library prefixes every parsed node with it's namespace URI in Clark's Notation: {http://example

Solution 1:

You don't specifically need to use iterparse. Instead, the following script:

from cStringIO import StringIO
import xml.etree.ElementTree as ET

NS_MAP = {
    'http://www.red-dove.com/ns/abc' : 'rdc',
    'http://www.adobe.com/2006/mxml' : 'mx',
    'http://www.red-dove.com/ns/def' : 'oth',
}

DATA = '''<?xml version="1.0" encoding="utf-8"?><rdc:containerxmlns:mx="http://www.adobe.com/2006/mxml"xmlns:rdc="http://www.red-dove.com/ns/abc"xmlns:oth="http://www.red-dove.com/ns/def"><mx:Style><oth:style1/></mx:Style><mx:Style><oth:style2/></mx:Style><mx:Style><oth:style3/></mx:Style></rdc:container>'''

tree = ET.parse(StringIO(DATA))
some_node = tree.getroot().getchildren()[1]
print ET.fixtag(some_node.tag, NS_MAP)
some_node = some_node.getchildren()[0]
print ET.fixtag(some_node.tag, NS_MAP)

produces

('mx:Style', None)
('oth:style2', None)

Which shows how you can access the fully-qualified tag names of individual nodes in a parsed tree. You should be able to adapt this to your specific needs.

Post a Comment for "Alter Namespace Prefixing With Elementtree In Python"