【问题标题】:How to parse data inside XML?如何解析 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>

【问题讨论】:

标签: python xml parsing odoo-14


【解决方案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 解析器以再次解析, 获取内部文档。

      【讨论】:

        猜你喜欢
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多