使用pythons builtin xml.etree.ElementTree

时间:2016-07-11 14:26:06

标签: python xsd elementtree

我从第三方应用程序中获得了一堆xsd文件。现在我想解析这些文件并从这些定义创建对象,这样我就可以轻松处理它们(比如myXSDObj.attr1 = myValue)。

我知道那里有许多模块(lxml,PyXB,......)就是这样做的!但不幸的是,我仅限于Python 2.7的内置函数,并且不能使用其他模块。

我想过使用etree,因为它看起来更符合编码器。但我找不到创建对象的方法。 Element类似乎不是我可以设置已定义属性的对象。它好像是其他东西。我可以在Element类上设置任何属性,即使它没有在xsd中定义。这里有一些代码:

try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET

tree = ET.parse(r'C:\Program Files (x86)\censored\CustomerTypes.xsd')
root = tree.getroot()

for element in root.iter('{http://www.w3.org/2001/XMLSchema}complexType'):
    name = element.attrib.get('name')
    if name == "CustomerComType":
        for child in element:
            for baby in child:
                if baby.attrib.get('name') == 'UniqueReference':
                    break

baby.set('UniqueReference_MyBloodyTest', 'test')
print baby.attrib

#Result:
#{'UniqueReference_MyBloodyTest': 'test', 'type': 'customertypes:UniqueReferenceSimType', 'name': 'UniqueReference', 'minOccurs': '0'}

结果不是我想要的。我希望它抛出错误,因为没有属性' UniqueReference_MyBloodyTest'。所以我完全错过了。 那么......我应该怎么说...... 我应该继续尝试etree还是我应该尝试minidom?多年前我曾经使用过minidom,我记得头疼和最后一段代码。

0 个答案:

没有答案