gpt4 book ai didi

python - 使用 Python 将 XML 模式定义解析为 CSV

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

我想将 XML 架构定义的元素解析为 CSV 文件以供记录和分析。我的 XSD 采用以下形式;

<xs:element name="ELEMENT">
<xs:complexType>
<xs:sequence>
<xs:element ref="element 1"/>
<xs:element ref="element 2"/>
<xs:element ref="element 3"/>
</xs:sequence>
</xs:complexType>
</xs:element>

对于给定的元素名称,我想创建一个包含元素 1、元素 2、元素 3 等的 CSV。

我已经尝试过 Python lxml 库,但还不能通过单个元素访问/过滤。

import xml.etree.ElementTree as ET
tree = ET.parse('doc.xsd')
root = tree.getroot()
for child in root:
print child.tag, child.attrib

最佳答案

以下代码显示了如何在 XSD 中搜索元素名称。

from lxml import etree
xsdstr = """
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ELEMENT">
<xs:complexType>
<xs:sequence>
<xs:element ref="element 1"/>
<xs:element ref="element 2"/>
<xs:element ref="element 3"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
"""

doc = etree.fromstring(xsdstr.strip())

namespaces = {"xs": "http://www.w3.org/2001/XMLSchema"}

names = doc.xpath("//xs:element/@ref", namespaces=namespaces)
print names

运行它打印:

['element 1', 'element 2', 'element 3']

如果您有更复杂的架构,您可能需要更好地定位名称,这是可能的示例:

print "trying more precise targeting ------"
names = doc.xpath("//xs:element[@name='ELEMENT']//xs:sequence/xs:element/@ref", namespaces=namespaces)
print names

在我们的例子中,结果是一样的。

关于python - 使用 Python 将 XML 模式定义解析为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390817/

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