doy*_*yle 5 python xml xsd python-3.x
所以我会问这个问题,因为我首先不确定是否可以问这个问题。
我想使用我刚接触的Python3 来读取XML 树。我使用以下方法相对轻松地完成了此任务:
xml.etree.ElementTree.parse(urllib.request.urlopen(url))
Run Code Online (Sandbox Code Playgroud)
XML 流是不同的数据集,并且有一个可用的 XSD,我也以相同的方式对其进行了解析。现在,我的问题是我可以使用 XSD 架构创建解析器吗?我对这种方式的 XML 很陌生,但我发现了一些示例,其中使用 XSD 生成解析器对象,然后相应地读取 XML。但是,我在 Python3 中找不到等效项。
这是我在 Python2.X 中想要的内容:
schema = etree.XMLSchema(schema_root)
xmlparser = etree.XMLParser(schema=schema)
Run Code Online (Sandbox Code Playgroud)
我不确定我是否正确地理解了这一点。也许这是一个 XML 问题而不是 python 问题,即,也许您只能根据模式验证 XML,而不能实际使用它来解析 XSD 中的细节。有人帮忙解决这个问题吗?
xmlschema是一个 Python 模块,用于管理 XML 模式或验证 XSD 的 XML 实例。
使用 Python3 根据 XML 架构验证来自 URL 的 XML 文档的示例。
import requests
import xmlschema
import xml.etree.ElementTree as ET
# to make it simple use external XML Schema and create a local file from it to validate XML examples
xsd_url = "https://raw.githubusercontent.com/sissaschool/xmlschema/master/tests/test_cases/examples/collection/collection.xsd"
with open("test.xsd", "w", newline="") as out:
out.write(requests.get(xsd_url).text)
xsd = xmlschema.XMLSchema("test.xsd")
# XML #1 validates to the Schema
url1 = "https://raw.githubusercontent.com/sissaschool/xmlschema/master/tests/test_cases/examples/collection/collection.xml"
xt = ET.fromstring(requests.get(url1).text)
print("xml1 valid=", xsd.is_valid(xt), sep="")
# XML #2 with invalid structure
url2 = "https://raw.githubusercontent.com/sissaschool/xmlschema/master/tests/test_cases/examples/collection/collection-1_error.xml"
xt = ET.fromstring(requests.get(url2).text)
print("xml2 valid=", xsd.is_valid(xt), sep="")
Run Code Online (Sandbox Code Playgroud)
输出:
xml1 valid=True
xml2 valid=False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4059 次 |
| 最近记录: |