我从第三方应用程序中获得了一堆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,我记得头疼和最后一段代码。