如何解析 XML 中的数据?
Posted
技术标签:
【中文标题】如何解析 XML 中的数据?【英文标题】:How to parse data inside XML? 【发布时间】:2021-11-28 07:28:27 【问题描述】:知道如何解析这种记录吗?这条记录上有数据。
<record id="1" model="custom.model>
<field name="name">Create</field>
<field name="email_from">dummy@mail.com</field>
<field name="email_to">todummy@mail.com</field>
<field name="email_subject">Create new company</field>
<field name="email_body">
<![CDATA[
<record>
<field name="process">Create</field>
<field name="model">res.company</field>
<field name="name">XYZ Company</field>
<field name="currency_id">base.USD</field>
</record>
]]>
</field>
<field name="email_read">False</field>
</record>
【问题讨论】:
您好,这个问题的答案对您有帮助吗? ***.com/questions/2784183/what-does-cdata-in-xml-mean 您好,感谢您的评论。我正在寻找如何读取 cdata 以便我知道如何自动将其放在记录中 您在寻找CDATA
中的信息吗?
【参考方案1】:
假设您正在寻找 CDATA
中的数据,下面的代码会找到该部分并将其解析为 xml。
import xml.etree.ElementTree as ET
xml = '''<record id="1" model="custom.model">
<field name="name">Create</field>
<field name="email_from">dummy@mail.com</field>
<field name="email_to">todummy@mail.com</field>
<field name="email_subject">Create new company</field>
<field name="email_body">
<![CDATA[
<record>
<field name="process">Create</field>
<field name="model">res.company</field>
<field name="name">XYZ Company</field>
<field name="currency_id">base.USD</field>
</record>
]]>
</field>
<field name="email_read">False</field>
</record>'''
outer_root = ET.fromstring(xml)
email = outer_root.find('.//field[@name="email_body"]')
inner_root = ET.fromstring(email.text)
for field in inner_root.findall('field'):
print(f'field.attrib["name"] -> field.text')
输出
process -> Create
model -> res.company
name -> XYZ Company
currency_id -> base.USD
【讨论】:
【参考方案2】:解析 XML 文档:
导入xml.dom.minidom
。
使用函数parse
解析文档:doc=xml.dom.minidom.parse(file name)
。
使用代码从 XML 文档调用 XML 标记列表:doc.getElementsByTagName(“name of xml tags”)
。
【讨论】:
【参考方案3】:基本上,您使用 XML 解析器以正常方式解析外部文档,导航到带有 name="email_body"
的字段,提取该元素的字符串值,然后将该字符串传递给新的 XML 解析器以再次解析, 获取内部文档。
【讨论】:
以上是关于如何解析 XML 中的数据?的主要内容,如果未能解决你的问题,请参考以下文章