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"