簡體   English   中英

使用 python 解析 XSD 文件

[英]Parse an XSD file using python

我正在嘗試從給定的 XML 模式生成一個 XML 文件。 我已經能夠用 python 中的 pyxb 庫來做到這一點。 但問題是隨着 XSD 變得巨大,不可能手動編碼每個標簽。 是否有任何 python 庫可以從給定的 XSD 文件創建數據結構,該文件可以迭代

這個庫似乎做你想做的事: https : //pypi.org/project/xmlschema/

瀏覽文檔后,我發現了這個代碼示例: https : //xmlschema.readthedocs.io/en/latest/usage.html#xsd-declarations

>>> import xmlschema
>>> from pprint import pprint
>>> schema = xmlschema.XMLSchema('xmlschema/tests/test_cases/examples/vehicles/vehicles.xsd')
>>> schema.types
NamespaceView({'vehicleType': XsdComplexType(name='vehicleType')})
>>> pprint(dict(schema.elements))
{'bikes': XsdElement(name='vh:bikes', occurs=[1, 1]),
 'cars': XsdElement(name='vh:cars', occurs=[1, 1]),
 'vehicles': XsdElement(name='vh:vehicles', occurs=[1, 1])}
>>> schema.attributes
NamespaceView({'step': XsdAttribute(name='vh:step')})

所以看起來它可以用來創建一個可以從 XSD 文件迭代的 python 數據結構。

這個問題也可能是相關的: How to convert XSD to Python Class

xsdata從 XML 模式生成數據類 它還可以將數據類呈現為 XML。 可以通過向構造函數提供所有命名參數(可以使用 mypy 或 pylance 靜態檢查)或使用字典和dacite來實例化數據類。

常見問題解答中所述,最好使用 Python 3.10,以便必需字段成為構造函數的必需參數。 為此,請執行xsdata init-config並在.xsdata.xml設置kwOnly=true

您可以從 XSD 文件生成 XML 文件:

import requests

with open('file.xsd', 'r') as f:
    data = f.read()
r = requests.post('https://www.liquid-technologies.com/api/Converter', json={"Filename": "schema.xsd", "Type": "xsd", "Data": data, "TargetType": "xml", "Arguments": {"elementName": "Root", "elementNamespace": "", "addAnyAttributes": False, "addAnyElements": False, "forceOptionItemsToDepthOf": "4", "forceXsiNamespaceDelaration": False, "maxDepthToCreateOptionalItems": "7", "indent": "2", "indentChar": " ", "indentAttributes": False, "seed": "9722"}})
with open('file.xml', 'w') as f:
    f.write(r.json()['Files'][0]['Data'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM