从使用xmlschema
包的 XML Schema 中,我提取了一个 XsdEnumerationFacets,如下所示
XsdEnumerationFacets(['OP1', 'OP2', 'OP3', 'OP3', 'OP4', ...])
如何从中提取可能的值?(在这种情况下,'OP1'、'OP2'、'OP3'、'OP3'、'OP4' 等等)。
我有一个想法将它转换为字符串(str(enum)
)并解析它,但如果它很长,则不包括最后一个元素。
(我有 xmlschema==1.9.2 和 Python 3.9。)
例子:
schema.xsd
是
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.java2s.com" xmlns="http://www.java2s.com"
elementFormDefault="qualified">
<xs:element name = "Tshirt">
<xs:complexType>
<xs:sequence>
<xs:element name = "Color" type = "clothesColorType" />
<xs:element name = "Size" type = "clothesSizeType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="clothesSizeType">
<xs:restriction base="xs:string">
<xs:enumeration value="S" />
<xs:enumeration value="M" />
<xs:enumeration value="L" />
<xs:enumeration value="XL" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="clothesColorType">
<xs:restriction base="xs:string">
<xs:enumeration value="Black" />
<xs:enumeration value="White" />
<xs:enumeration value="Green" />
<xs:enumeration value="Blue" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
我的代码:
import xmlschema
schema = xmlschema.XMLSchema("schema.xsd")
tshirt = schema.elements["Tshirt"]
enumerate_values = {}
for c in tshirt.type.content:
for comp in c.type.iter_components():
if isinstance(comp, xmlschema.validators.XsdEnumerationFacets):
enumerate_values[c.name.split("}")[1]] = str(comp)
print(enumerate_values)
这为我创造了字典:
{'Color': "XsdEnumerationFacets(['Black', 'White', 'Green', 'Blue'])", 'Size': "XsdEnumerationFacets(['S', 'M', 'L', 'XL'])"}
而不是"XsdEnumerationFacets(['Black', 'White', 'Green', 'Blue'])"
作为一个价值,我想拥有 ['Black', 'White', 'Green', 'Blue']
. 而且我不想解析这个字符串。正如我提到的更长的值列表,最后一个元素被省略号 ( ...
) 替换,因此解析字符串会给我一个错误或部分结果。