gpt4 book ai didi

python - 在 Python 中基于 XSD 验证和填充 XML 中的默认值

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:39 25 4
gpt4 key购买 nike

在针对 XSD 进行验证期间如何在我的 XML 中填充默认值?如果我的属性未定义为 use="require" 并且具有 default="1",则可以将这些默认值从 XSD 填充到 XML。

例子:原始 XML:

<a>
<b/>
<b c="2"/>
</a>

XSD方案:

<xs:element name="a">
<xs:complexType>
<xs:sequence>
<xs:element name="b" maxOccurs="unbounded">
<xs:attribute name="c" default="1"/>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

我想使用 XSD 验证原始 XML 并填充所有默认值:

<a>
<b c="1"/>
<b c="2"/>
</a>

如何在 Python 中获取它?通过验证就没有问题(例如 XMLSchema)。问题是默认值。

最佳答案

为了跟进我的评论,这里有一些代码

from lxml import etree
from lxml.html import parse

schema_root = etree.XML('''\
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="a">
<xs:complexType>
<xs:sequence>
<xs:element name="b" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="c" default="1" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>''')

xmls = '''<a>
<b/>
<b c="2"/>
</a>'''

schema = etree.XMLSchema(schema_root)
parser = etree.XMLParser(schema = schema, attribute_defaults = True)

root = etree.fromstring(xmls, parser)
result = etree.tostring(root, pretty_print=True, method="xml")

print result

给你

<a>
<b c="1"/>
<b c="2"/>
</a>

我稍微修改了您的 XSD,将 xs:attribute 包装在 xs:complexType 中,并添加了架构命名空间。要填写默认值,您需要将 attribute_defaults=True 传递给 etree.XMLParser(),它应该可以工作。

关于python - 在 Python 中基于 XSD 验证和填充 XML 中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3013270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com