使用Python内置的xml.etree.ElementTree生成XSD文件的对象形式

2024-07-04 05:41:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我知道有很多模块(lxml,PyXB,…)都能做到这一点!但不幸的是,我仅限于Python2.7的内置模块,不能使用其他模块。在

我考虑过使用etree,因为它看起来很友好。但我找不到一种创造物体的方法。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\u MyBloodyTest”。所以我完全误解了。 好吧…我该怎么说。。。 我应该继续尝试etree还是应该尝试minidom?几年前,我曾经用过minidom,我记得我头痛不已,最后还写了一段代码。在


Tags: 模块文件nameinfor属性定义element

热门问题