我正在从事一个旨在获取许多不同数据源并将其放置在数据表中的项目。为此,我们有一种方法可以通过具有表中定义的所有字段的XML文档导入数据。其中一些字段是必填字段。必填字段的出现次数最小值为非零正整数。
我有这些XML文档的XSD文件。这不是一对一的副本(因为它是专有的),但这是一个示例:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Widget">
<xs:complexType>
<xs:all>
<xs:element name="GuyWhoMadeWidget" nillable="true" minOccurs="1">
</xs:all>
<xs:attribute name="version" type="xs:string"/>
<xs:complexType>
</xs:element>
</xs:schema>
我想做的是进入<xs: element>
元素,并在Python中对minOccurs是否为非零值进行逻辑处理。这是一些伪代码:
file_object = open(xsd_file)
required_fields = []
xsd_python_object = parse_xsd_to_python(file_object)
for element in xsd_python_object:
if element.minOccurs != 0:
required_fields.append(element.name)
print(required_fields)
此处的示例输出为:
Required fields for "Widget" table:
GuyWhoMadeWidget
我一直在研究xmlschema和lxml包,但是它们的功能使我感到想要,困惑或两者兼而有之。
答案 0 :(得分:0)
我有一个需要迭代 XSD 文件的项目,我使用了类似于此代码的 xmlschema 库:
import xmlschema
schema = xmlschema.XMLSchema('your xsd file')
for xsd_component in schema.iter_components():
if 'Element' in xsd_component:
element_name = xsd_component.name
例如,打印 xsd_component 将导致“XsdElement(name='sensor1value',occurs=[1, 1])”,其中我将使用 .split() 函数来检索我需要的信息。 if 是你可以做什么的一个例子。 该文档并未显示您可以使用的所有内容,因此如果您需要某些特定功能,请检查其他功能。