Python3解析类xml数据

说说题外话:
最近有个需求,对接的是比较老的一套接口,返回的数据中有类似于xml的数据,但不是标准的xml格式。本人主要方向是写java web方面的全栈工程师,对python也挺感兴趣的,就使用python进行了这次的数据处理工作,下面分享下如何解决本次问题的过程,希望能帮到你。

样例数据

本次接触的到的数据有两种格式

1.<node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node>
2.<abc>123</abc>

数据处理

采用python对xml解析的方式进行本次的数据解析

导包

#首先导入解析xml的包
import xml.etree.ElementTree as Etree

其他也有一些对xml解析的包,但是使用过程中总觉得有些问题,所以这里就选用的这个包

分析

如果直接使用xml.etree.ElementTree直接对xml_1字符串进行格式化

import xml.etree.ElementTree as Etree
xml_1 = """"<node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node>"""
xml_2 = """<abc>123</abc>"""

print(Etree.fromstring(xml_1))

出现报错
xml.etree.ElementTree.ParseError: unclosed token: line 1, column 0
因为xml_1并不是一个完整的xml格式,是3个<node></node>组成的

解决方式

先将xml_1转变为一个完整的xml结构

import xml.etree.ElementTree as Etree
xml_1 = """"<node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node>"""
xml_2 = """<abc>123</abc>"""

newXml_1 = '<root>' + xml_1 + '</root>'
print(Etree.fromstring(newXml_1))   #<Element 'root' at 0x0000019479730040>
print(len(Etree.fromstring(newXml_1)))  #3

解析成功
剩下的就是获取到数据了,很正常的思路,一个for循环
每次循环,对每个node使用find函数分别获取到name,value的对象,使用text属性获取到内容

import xml.etree.ElementTree as Etree
xml_1 = """"<node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node>"""
xml_2 = """<abc>123</abc>"""

newXml_1 = '<root>' + xml_1 + '</root>'
#print(Etree.fromstring(newXml_1))
#print(len(Etree.fromstring(newXml_1)))

nodes = Etree.fromstring(newXml_1)
for node in nodes:
    print("name="+node.find("name").text+";value="+node.find("value").text)
#结果
#name=a;value=1
#name=a;value=1
#name=a;value=1

同理xml_2字符串解析
直接使用Etree.fromstring(str)进行格式化后,直接获取其text属性即可

import xml.etree.ElementTree as Etree
xml_1 = """"<node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node><node><name>a</name><value>1</value></node>"""
xml_2 = """<abc>123</abc>"""

# newXml_1 = '<root>' + xml_1 + '</root>'
#print(Etree.fromstring(newXml_1))
#print(len(Etree.fromstring(newXml_1)))

# nodes = Etree.fromstring(newXml_1)
# for node in nodes:
#     print("name="+node.find("name").text+";value="+node.find("value").text)
abc = Etree.fromstring(xml_2)
print(abc.text)   #123

PS:以上是本次分享,希望大家都能在程序的道路上越走越远,加油陌生人!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python数据解析JSON和XML是指使用Python编程语言解析JSON或XML格式的数据。其中JSON是一种轻量级的数据交换格式,常用于Web应用程序中的数据传递;XML是一种标记语言,可用于数据存储和传输。使用Python的内置库或第三方库,可以对JSON或XML数据进行解析和处理。 ### 回答2: Python是一种流行的脚本语言,它被广泛用于数据解析和处理,包括解析json和xml格式的数据。JSON是JavaScript对象表示法,一个轻量级的数据交换格式。XML是可扩展标记语言,也是一种常用的数据交换格式。在Python中,解析json和xml数据的方法略有不同。 1. 解析JSON数据 Python内置了一个json模块,可以轻松地解析JSON数据。该模块包含两个主要函数,load()和loads()。load()函数将JSON数据从文件读取并解析Python对象,而loads()函数则将JSON字符串解析Python对象。例如,以下是解析JSON数据的样例代码: import json # 从文件中加载JSON数据 with open('data.json') as f: data = json.load(f) # 解析JSON字符串 json_str = '{"name": "John", "age": 30, "city": "New York"}' data = json.loads(json_str) 在上面的代码中,我们使用了json.load()函数从文件中加载JSON数据,并使用json.loads()函数将JSON字符串解析Python对象。 2. 解析XML数据 Python中的XML解析器包括xml.dom和xml.sax。使用xml.dom可以将整个XML文档解析为一个DOM对象树,而使用xml.sax则将解析器分离为一个解析器、一个文档和一个事件处理程序。以下是使用xml.dom解析XML数据的示例代码: import xml.dom.minidom # 从文件中加载XML数据 dom = xml.dom.minidom.parse('data.xml') # 获取根元素对象 root = dom.documentElement # 获取所有子元素 items = root.getElementsByTagName('item') # 遍历子元素 for item in items: id = item.getAttribute('id') name = item.getElementsByTagName('name')[0].childNodes[0].nodeValue desc = item.getElementsByTagName('description')[0].childNodes[0].nodeValue price = item.getElementsByTagName('price')[0].childNodes[0].nodeValue print(id, name, desc, price) 在上面的代码中,我们使用xml.dom.minidom模块解析XML数据,可以使用document对象获取根元素对象,然后使用getElementsByTagName()方法获取所有具有相同名称的元素,从而遍历XML数据并提取所需的数据。 总之,Python提供了许多工具和库,可帮助您轻松地解析JSON和XML格式的数据。根据您的需求,可以选择使用json或xml解析器来处理数据。 无论您选择哪个解析器,都可以使用Python来轻松地解析和处理数据。 ### 回答3: Python是一种流行的编程语言,适用于各种用途,包括数据解析。在Python中,JSON和XML是两种最常用的数据交换格式。虽然这两种格式都用于将数据从一个应用程序传递到另一个应用程序,但它们具有不同的语法。 JSON(JavaScript Object Notation)是一种轻量级数据格式,易于阅读和编写,在Web开发中尤其受欢迎。它使用键值对来表示数据,值可以是数字、字符串、布尔值、列表、对象或null。在Python中,可以使用json模块来解析JSON数据。json模块提供了许多函数来读取和写入JSON数据,包括loads()和dumps()函数。loads()函数允许将JSON字符串转换为Python对象,而dumps()函数允许将Python对象转换为JSON字符串。 XML(扩展标记语言)是一种用于传输和存储数据的标记语言,在Web服务、B2B通信和数据库管理等领域中广泛使用。与JSON不同,XML使用标签来表示数据。标签包含元素的名称和值,通常嵌套在其他元素中。在Python中,可以使用xml.etree.ElementTree模块来解析XML数据xml.etree.ElementTree模块提供了ElementTree,允许创建XML树,还有一些有用的函数,例如find()、iter()和parse(),用于搜索和解析XML树。 无论您使用JSON还是XMLPython都提供了功能强大的工具来解析和处理数据。选择哪种格式取决于您的应用程序的需求和数据的性质。如果数据是简单的键值对,JSON可能是一个更好的选择,而如果数据是复杂的、嵌套式结构,或者需要包含元数据XML可能更适合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值