python xml xpath,Python使用XPath解析XML文档

XPath(XML Path Language)是一种小型的查询语言:

1)可在XML中查找信息

2)支持HTML的查找

3)通过元素和属性进行导航

python开发使用XPath条件:

由于XPath属于lxml库模块,所以首先要安装库lxml

XPath的使用方法:

首先讲一下XPath的基本语法知识:

四种标签的使用方法

1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。

2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作。

3) /text() 获取当前路径下的文本内容。

4) /@xxxx 提取当前路径下标签的属性值

5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签

6) . 点 用来选取当前节点

7) .. 双点 选取当前节点的父节点

注:以下代码在Python3.6.1下调试通过

一、Python读取XML简单实例

from lxml import etree

text = """

1

2008

141100

4

2011

59900

68

2011

13600

"""

root = etree.XML(text)

for child in root:

print(child.tag, child.attrib)

print('rank',child.xpath('./rank/text()')[0])

print('year', child.xpath('./year/text()')[0])

print('gdppc', child.xpath('./gdppc/text()')[0])

print('neighbor', child.xpath('./neighbor/@name')[0])

from lxml import etree

text = """

1

2008

141100

4

2011

59900

68

2011

13600

"""root = etree.XML(text)

for child in root:

print(child.tag, child.attrib)

print('rank',child.xpath('./rank/text()')[0])

print('year', child.xpath('./year/text()')[0])

print('gdppc', child.xpath('./gdppc/text()')[0])

print('neighbor', child.xpath('./neighbor/@name')[0])

二、Python读取本地XML简单实例

如果XML文档存放在本地,可以文件对象打开xml就读取成字符串类型,也可以直接tree = etree.parse(“D:/lujing/test.xml”)读取。

etree.parse("D:/lujing/test.xml")读取。

from lxml import etree

tree = etree.parse("D:/lujing/test.xml")

root = tree.getroot()

for child in root:

print(child.tag, child.attrib)

print('rank',child.xpath('./rank/text()')[0])

print('year', child.xpath('./year/text()')[0])

print('gdppc', child.xpath('./gdppc/text()')[0])

print('neighbor', child.xpath('./neighbor/@name')[0])

etree.parse("D:/lujing/test.xml")读取。

from lxml import etree

tree = etree.parse("D:/lujing/test.xml")

root = tree.getroot()for child in root:

print(child.tag, child.attrib)

print('rank',child.xpath('./rank/text()')[0])

print('year', child.xpath('./year/text()')[0])

print('gdppc', child.xpath('./gdppc/text()')[0])

print('neighbor', child.xpath('./neighbor/@name')[0])

三、为防止读取XML出错导致程序退出,可使用try捕获异样

from lxml import etree

tree = etree.parse("D:/lujing/test.xml")

root = tree.getroot()

root = etree.XML(text)

for child in root:

try:

print(child.tag, child.attrib)

print('rank',child.xpath('./rank/text()')[0])

print('year', child.xpath('./year/text()')[0])

print('gdppc', child.xpath('./gdppc/text()')[0])

print('neighbor', child.xpath('./neighbor/@name')[0])

print('neighbor', child.xpath('./neighbor/@name')[1])

except Exception as e:

print(e)

from lxml import etree

tree = etree.parse("D:/lujing/test.xml")

root = tree.getroot()root = etree.XML(text)

for child in root:

try:

print(child.tag, child.attrib)

print('rank',child.xpath('./rank/text()')[0])

print('year', child.xpath('./year/text()')[0])

print('gdppc', child.xpath('./gdppc/text()')[0])

print('neighbor', child.xpath('./neighbor/@name')[0])

print('neighbor', child.xpath('./neighbor/@name')[1])

except Exception as e:

print(e)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值