如何解析 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 中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

boost中的属性是如何解析的?肥皂xml解析?

如何解析这个 XML 数据..?

如何在FineReport中解析数据库内XML文件

如何解析简单的xml文档?

如何从头开始创建/编写一个简单的 XML 解析器?

如何使用 PHP 跳过 XML 文件中的无效字符