blob: 175349958cea35390a7578bc54f5766dd8885cc5 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Automatically generated by addcopyright.py at 01/29/2013
'''
Created on Dec 25, 2012
@author: Frank
'''
import xml.etree.ElementTree as etree
import re
import types
class XmlObject(object):
def __init__(self, tag):
self.__tag_name__ = tag
def put_attr(self, name, val):
val = val.strip().strip('\t')
setattr(self, name + '_', val)
def put_text(self, val):
val = val.strip().strip('\n').strip('\t')
if val == "":
setattr(self, 'text_', None)
else:
setattr(self, 'text_', val)
def put_node(self, name, val):
if not hasattr(self, name):
setattr(self, name, val)
return
nodes = getattr(self, name)
if not isinstance(nodes, types.ListType):
nodes = []
old = getattr(self, name)
nodes.append(old)
nodes.append(val)
setattr(self, name, nodes)
else:
nodes.append(val)
setattr(self, name, nodes)
def get(self, name, default=None):
if hasattr(self, name):
val = getattr(self, name)
if name.endswith('_'):
return val
else:
return val.text_
else:
return default
def __getattr__(self, name):
if name.endswith('__'):
n = name[:-1]
if hasattr(self, n):
return getattr(self, n)
else:
return None
else:
e = AttributeError('%s has no attribute %s. missing attribute %s in element <%s>' % (self.__class__.__name__, name, name, self.__tag_name__))
setattr(e, 'missing_attrib', name)
setattr(e, 'tag_name', self.__tag_name__)
raise e
def _loads(node):
xo = XmlObject(node.tag)
for key in node.attrib.keys():
xo.put_attr(key, node.attrib.get(key))
if node.text:
xo.put_text(node.text)
for n in list(node):
sub_xo = _loads(n)
xo.put_node(n.tag, sub_xo)
return xo
def loads(xmlstr):
xmlstr = re.sub(r'xmlns=".*"', '', xmlstr)
root = etree.fromstring(xmlstr)
return _loads(root)