数据开发_Python解析XML文件

解析XML文件

XML是可扩展标记语言,主要用于传输和存储数据

解析方式

使用lxml解析
主要注意: text  tag  attrib 使用方式 有 get() 以及迭代的情况

数据示例

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <jober id="sonnel">
        <reader id="b!***8c5b5">
            <SourceId>a31</SourceId>
            <param value="" key="Split"/>
            <param value="" key="charset"/>
            <param value="7" key="dataSourceType"/>
        </reader>
    </jober>
</root>    

代码示例

#!/usr/bin/env python
# -*-coding:utf-8-*-
# @file parse_xml_exp.py
# @date 2020-10-**
    
from lxml import etree


def node_text_attrib(node):
    result_line = ""
    for result in node.iter():
        if result.text is not None:
            result_line = result_line + result.tag + " : " + result.text + '\n'
        else:
            # result.tag, result.attrib.get("key"), result.attrib
            result_line = result_line + result.tag + " : " + result.attrib.get("key")+ '\n'
    return result_line


if __name__ == '__main__':
    input_file = r"C:\Users\test\Desktop\jobs.xml"
    # 将xml解析为树结构 - parse()   used to parse from files and file-like objects
    # 解析文件类型对象
    xml_file = etree.parse(input_file)
    # 获得该树的树根
    root_node = xml_file.getroot()
    print(root_node)
    # 子节点
    if len(root_node):
        print("子节点个数: ", len(root_node))
    # XML elements support attributes
    # 这样便可以遍历根元素的所有子元素(这里是job元素)
    for article in root_node:
        print("元素名称:", article.tag)
        #  用.get("属性名")可以得到article元素相应属性的值
        print(article.get("id"))
        for field in article:
            # 用.tag可以得到元素的名称,而.text可以得到元素的内容
            if field.tag == "reader":
                # #将元素text连同sub_element一起打印
                     print(node_text_attrib(field))
    

说明

 1.进行数据操作之前记得备份,使用备份的数据进行操作。确保失败可回溯和追踪的措施之一
 2,可变和不可变的部分-使用脚本拼接
 3.模板数据一定要记性验证,同时有些重复性的工作记得使用工具来校验

参考

Xml的使用在一些场景下比较常见
posted @ 2020-10-28 01:31  辰令  阅读(105)  评论(0)    收藏  举报