python中的XML解析
ElementTree的就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
- <根>
- <personage =“18”>
- <名称> HZJ </名称>
- <性别>人</性别>
- </人>
- <personage =“19”des =“hello”>
- <名称>基基</名称>
- <性别>女性</性别>
- </人>
- </根>
1.加载XML文件
加载XML文件共有2种方法,一是加载指定字符串,二是加载指定文件
2.获取元件的方法
a)通过getiterator
b)过孩子
c)找到方法
d)找到方法
- <span style = “font-size:13px;” > # - * - 编码:utf-8 - * -
- 从 xml.etree 导入 ElementTree
- def print_node(节点):
- '' '''打印结点基本信息'''
- 打印“==============================================”
- 打印“node.attrib:%s” %node.attrib
- 如果 node.attrib.has_key(“age” )> 0 :
- 打印“node.attrib ['age']:%s” %node.attrib [ 'age' ]
- 打印“node.tag:%s” %node.tag
- 打印“node.text:%s” %node.text
- def read_xml(文本):
- '' '''读取xml文件'''
- #加载XML文件(2种方法,一是加载指定字符串,二是加载指定文件)
- #root = ElementTree.parse(r“D:/test.xml”)
- root = ElementTree.fromstring(文本)
- #获取元素的方法
- #1通过getiterator
- lst_node = root.getiterator(“person” )
- 为 节点 在 lst_node:
- print_node(节点)
- #2通过getchildren
- lst_node_child = lst_node [ 0 ] .getchildren()[ 0 ]
- print_node(lst_node_child)
- #3。找到方法
- node_find = root.find('person' )
- print_node(node_find)
- #4。的findall方法
- node_findall = root.findall(“person / name” )[ 1 ]
- print_node(node_findall)
- 如果 __name__ == ' __main__ ' :
- read_xml(open(“test.xml” ).read())
- </跨度>
- <span style = “font-size:13px;” > # - * - 编码:utf-8 - * -
- 从 xml.etree 导入 ElementTree
- def print_node(节点):
- '' '''打印结点基本信息'''
- 打印“==============================================”
- 打印“node.attrib:%s” %node.attrib
- 如果 node.attrib.has_key(“age” )> 0 :
- 打印“node.attrib ['age']:%s” %node.attrib [ 'age' ]
- 打印“node.tag:%s” %node.tag
- 打印“node.text:%s” %node.text
- def read_xml(文本):
- '' '''读取xml文件'''
- #加载XML文件(2种方法,一是加载指定字符串,二是加载指定文件)
- #root = ElementTree.parse(r“D:/test.xml”)
- root = ElementTree.fromstring(文本)
- #获取元素的方法
- #1通过getiterator
- lst_node = root.getiterator(“person” )
- 为 节点 在 lst_node:
- print_node(节点)
- #2通过getchildren
- lst_node_child = lst_node [ 0 ] .getchildren()[ 0 ]
- print_node(lst_node_child)
- #3。找到方法
- node_find = root.find('person' )
- print_node(node_find)
- #4。的findall方法
- node_findall = root.findall(“person / name” )[ 1 ]
- print_node(node_findall)
- 如果 __name__ == ' __main__ ' :
- read_xml(open(“test.xml” ).read())
- </跨度>
想想为什么?不明白,请看下面
- #编码= UTF-8
- 从 xml.etree 导入 ElementTree作为ET
- #要找出所有人的年龄
- per = ET.parse('test.xml' )
- p = per.findall('/ person' )
- for x in p:
- 打印 x.attrib
- 打印
- for oneper in p: #找出person节点
- 对于 孩子 在 oneper.getchildren(): #找出人节点的子节点
- 打印 child.tag,':' ,child.text
- 打印'年龄:' ,oneper.get('时代' )
- 打印'############'
- #编码= UTF-8
- 从 xml.etree 导入 ElementTree作为ET
- #要找出所有人的年龄
- per = ET.parse('test.xml' )
- p = per.findall('/ person' )
- for x in p:
- 打印 x.attrib
- 打印
- for oneper in p: #找出person节点
- 对于 孩子 在 oneper.getchildren(): #找出人节点的子节点
- 打印 child.tag,':' ,child.text
- 打印'年龄:' ,oneper.get('时代' )
- 打印'############'
结果如下:
- { 'age' : '18' }
- { 'age' : '19' , 'des' : 'hello' }
- 名称:hzj
- 性别:男人
- 年龄: 18岁
- ############
- 名称:kiki
- 性别:女性
- 年龄:19岁
- ############

浙公网安备 33010602011771号