在Python中使用ElementTree从XML提取数据

丹尼克·戈布诺夫(Denik Gorbunov)

我有以下XML文件,必须将其解析为csv文件并从中提取数据。在此文件中,我有两个框(box_id),它们包装在两个不同的父对象(parent_box_id)上,并且每个框的内容的详细信息(元素sgtin-> info_sgtin)。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<doc>
    <info id_reference="2">
        <data_down>
            <tree>
                <box_id>046071598600870568</box_id>
                <parent_box_id>046071598600875594</parent_box_id>
            </tree>
            <tree>
                <box_id>046071598600870575</box_id>
                <parent_box_id>046071598600875595</parent_box_id>
            </tree>
            <tree>
                <sgtin>
                    <info_sgtin>
                        <sgtin>04607008133585B0SE1HVHBGR3A</sgtin>
                        <box_id>046071598600870568</box_id>
                        <gtin>04607008133585</gtin>
                        <series_number>026A</series_number>
                    </info_sgtin>
                </sgtin>
                <parent_box_id>046071598600870568</parent_box_id>
            </tree>
            <tree>
                <sgtin>
                    <info_sgtin>
                        <sgtin>046070081335856F7P78HBVBEH2</sgtin>
                        <box_id>046071598600870568</box_id>
                        <gtin>04607008133585</gtin>
                        <series_number>026A</series_number>
                    </info_sgtin>
                </sgtin>
                <parent_box_id>046071598600870568</parent_box_id>
            </tree>
            <tree>
                <sgtin>
                    <info_sgtin>
                        <sgtin>046070081335854T61H7CSXDE9W</sgtin>
                        <box_id>046071598600870575</box_id>
                        <gtin>04607008133585</gtin>
                        <series_number>026A</series_number>
                    </info_sgtin>
                </sgtin>
                <parent_box_id>046071598600870575</parent_box_id>
            </tree>
        </data_down>
    </info>
</doc>

为此,我决定在Python中使用Elementtree,但是问题是在我的XML文件中,我有两种tag变体。

首先,我遍历所有细节并捕获box_id的值,但是在那之后,我必须转到父项并获取其中打包了box_id的parent_box_id。

换句话说,我想通过以下方式获取数据:

parent_box_id       box_id              sgtin                           series_number
046071598600875594  046071598600870568  04607008133585B0SE1HVHBGR3A     026A
046071598600875594  046071598600870568  046070081335856F7P78HBVBEH2     026A
046071598600875595  046071598600870575  046070081335854T61H7CSXDE9W     026A

但是我不知道如何获取parent_box_id值。感谢社区的任何支持。

这是我的代码:

import csv
import xml.etree.ElementTree as ET

csv.writer(open('result.csv','w'),delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL))

tree = ET.parse('test.xml')
root = tree.getroot()

with open('result.csv','a',newline='') as myfile:
    writer = csv.writer(myfile, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    for alist in root.iter('info_sgtin'):
    sgtin = alist.find('sgtin').text
    box_id = alist.find('box_id').text
    series = alist.find('series_number').text

    writer.writerow([sgtin,box_id,series])
Zaraki Kenpachi

您需要遍历每个<tree>标签,并检查是否有需要的数据。然后收集它。

import xml.etree.ElementTree


root = xml.etree.ElementTree.parse('data.xml')

# collect parent data
parent_data = {}
for item in root.iter('tree'):
    box_id_match = item.find('box_id')
    parent_box_id_match = item.find('parent_box_id')
    if box_id_match != None:
        parent_data.update({box_id_match.text: parent_box_id_match.text})

data = []
for item in root.iter('tree'):
    sgtin = item.find('sgtin/info_sgtin/sgtin')
    box_id = item.find('sgtin/info_sgtin/box_id')
    series_number = item.find('sgtin/info_sgtin/series_number')
    # collect valid data
    if sgtin != None and box_id != None and series_number != None:
        parent_box_id = parent_data.get(box_id.text)
        data.append([parent_box_id, box_id.text, sgtin.text, series_number.text])

输出:

['046071598600875594', '046071598600870568', '04607008133585B0SE1HVHBGR3A', '026A']
['046071598600875594', '046071598600870568', '046070081335856F7P78HBVBEH2', '026A']
['046071598600875595', '046071598600870575', '046070081335854T61H7CSXDE9W', '026A']

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Python elementTree提取xml数据中的特定元素

来自分类Dev

使用ElementTree从XML提取数据的麻烦

来自分类Dev

使用Python ElementTree从XML中提取值

来自分类Dev

在Python中使用XML查找和提取数据

来自分类Dev

使用Python ElementTree从xml文档中提取文本

来自分类Dev

在python中使用xlrd从xls提取数据

来自分类Dev

使用Python ElementTree解析XML

来自分类Dev

使用Python从XML读取/提取数据

来自分类Dev

使用python从xml提取特定数据

来自分类Dev

使用 Python 3 从 xml 中提取数据

来自分类Dev

使用Python从xml文件中提取数据

来自分类Dev

使用 python 提取和绘制 XML 数据

来自分类Dev

Python从xml提取数据

来自分类Dev

从Python中的XML数据创建字典(使用xml.etree.ElementTree)

来自分类Dev

在Python中使用ElementTree解析具有名称空间的XML

来自分类Dev

在Python中使用ElementTree进行XML解析时检查子代的存在

来自分类Dev

使用ElementTree的递归XML解析python

来自分类Dev

使用ElementTree Python获取检索XML属性

来自分类Dev

使用python的ElementTree处理xml子对象

来自分类Dev

使用xml子对象,Python中的ElementTree

来自分类Dev

我可以在python中使用变量从Postgresql提取数据吗?

来自分类Dev

在Django中使用Python从API提取JSON数据

来自分类Dev

在 Python 中使用 BeautifulSoup 从 html 中提取数据

来自分类Dev

在Python中,如何使用xml.etree.ElementTree创建数据框?

来自分类Dev

如何使用 python 从soap响应中的多个命名空间获取数据:xml.etree.ElementTree

来自分类Dev

从xml文件提取数据(python)

来自分类Dev

使用python从xml数据中提取所有文本

来自分类Dev

从xml文件中提取项目并使用python创建数据框

来自分类Dev

使用Python从XML字符串中提取数据

Related 相关文章

  1. 1

    如何使用Python elementTree提取xml数据中的特定元素

  2. 2

    使用ElementTree从XML提取数据的麻烦

  3. 3

    使用Python ElementTree从XML中提取值

  4. 4

    在Python中使用XML查找和提取数据

  5. 5

    使用Python ElementTree从xml文档中提取文本

  6. 6

    在python中使用xlrd从xls提取数据

  7. 7

    使用Python ElementTree解析XML

  8. 8

    使用Python从XML读取/提取数据

  9. 9

    使用python从xml提取特定数据

  10. 10

    使用 Python 3 从 xml 中提取数据

  11. 11

    使用Python从xml文件中提取数据

  12. 12

    使用 python 提取和绘制 XML 数据

  13. 13

    Python从xml提取数据

  14. 14

    从Python中的XML数据创建字典(使用xml.etree.ElementTree)

  15. 15

    在Python中使用ElementTree解析具有名称空间的XML

  16. 16

    在Python中使用ElementTree进行XML解析时检查子代的存在

  17. 17

    使用ElementTree的递归XML解析python

  18. 18

    使用ElementTree Python获取检索XML属性

  19. 19

    使用python的ElementTree处理xml子对象

  20. 20

    使用xml子对象,Python中的ElementTree

  21. 21

    我可以在python中使用变量从Postgresql提取数据吗?

  22. 22

    在Django中使用Python从API提取JSON数据

  23. 23

    在 Python 中使用 BeautifulSoup 从 html 中提取数据

  24. 24

    在Python中,如何使用xml.etree.ElementTree创建数据框?

  25. 25

    如何使用 python 从soap响应中的多个命名空间获取数据:xml.etree.ElementTree

  26. 26

    从xml文件提取数据(python)

  27. 27

    使用python从xml数据中提取所有文本

  28. 28

    从xml文件中提取项目并使用python创建数据框

  29. 29

    使用Python从XML字符串中提取数据

热门标签

归档