Python lxml教程.docx_第1页
Python lxml教程.docx_第2页
Python lxml教程.docx_第3页
Python lxml教程.docx_第4页
Python lxml教程.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python lxml教程这两天因为要处理XML,研究了一下lxml库,做个总结。我在处理XML时,最想了解的三个问题是:问题1:有一个XML文件,如何解析问题2:解析后,如果查找、定位某个标签问题3:定位后如何操作标签,比如访问属性、文本内容等本文就是按这三个问题组织的,文本中代码都在Python 3.5中运行通过。开始之前,首先是导入模块,该库常用的XML处理功能都在lxml.etree中,可用下面的语句导入: from lxml import etreeElement类这一节回答问题3。Element是XML处理的核心类,Element对象可以直观的理解为XML的节点,大部分XML节点的处理都是围绕该类进行的。这部分包括三个内容:节点的操作、节点属性的操作、节点内文本的操作。节点操作1、创建Element对象直接使用Element方法,参数即节点名称。 root = etree.Element(root) print(root)2、获取节点名称使用tag属性,获取节点的名称。 print(root.tag)root3、输出XML内容使用tostring方法输出XML内容(后文还会有补充介绍),参数为Element对象。 print(etree.tostring(root)b3、输出XML内容使用tostring方法输出XML内容(后文还会有补充介绍),参数为Element对象。 child1 = etree.SubElement(root, child1) child2 = etree.SubElement(root, child2) child3 = etree.SubElement(root, child3)5、删除子节点使用remove方法删除指定节点,参数为Element对象。clear方法清空所有节点。 root.remove(child1) # 删除指定子节点 print(etree.tostring(root)b root.clear() # 清除所有子节点 print(etree.tostring(root)b6、以列表的方式操作子节点可以将Element对象的子节点视为列表进行各种操作: child = root0 # 下标访问 print(child.tag)child1 print(len(root) # 子节点数量3 root.index(child2) # 获取索引号1 for child in root: # 遍历. print(child.tag)child1child2child3 root.insert(0, etree.Element(child0) # 插入 start = root:1 # 切片 end = root-1: print(start0.tag)child0 print(end0.tag)child3 root.append( etree.Element(child4) ) # 尾部添加 print(etree.tostring(root)b其实前面讲到的删除子节点的两个方法remove和clear也和列表相似。7、获取父节点使用getparent方法可以获取父节点。 print(child1.getparent().tag)Root属性操作属性是以key-value的方式存储的,就像字典一样。1、创建属性可以在创建Element对象时同步创建属性,第二个参数即为属性名和属性值: root = etree.Element(root, interesting=totally) print(etree.tostring(root)b也可以使用set方法给已有的Element对象添加属性,两个参数分别为属性名和属性值: root.set(hello, Huhu) print(etree.tostring(root)b2、获取属性属性是以key-value的方式存储的,就像字典一样。直接看例子# get方法获得某一个属性值 print(root.get(interesting)totally# keys方法获取所有的属性名 sorted(root.keys()hello, interesting# items方法获取所有的键值对 for name, value in sorted(root.items():. print(%s = %r % (name, value)hello = Huhuinteresting = totally也可以用attrib属性一次拿到所有的属性及属性值存于字典中: attributes = root.attrib print(attributes)interesting: totally, hello: Huhu attributesgood = Bye # 字典的修改影响节点 print(root.get(good)Bye文本操作标签及标签的属性操作介绍完了,最后就剩下标签内的文本了。可以使用text和tail属性、或XPath的方式来访问文本内容。1、text和tail属性一般情况,可以用Element的text属性访问标签的文本。 root = etree.Element(root) root.text = Hello, World! print(root.text)Hello, World! print(etree.tostring(root)bHello, World!XML的标签一般是成对出现的,有开有关,但像HTML则可能出现单一的标签,比如下面这段代码中的。TextTailElement类提供了tail属性支持单一标签的文本获取。 html = etree.Element(html) body = etree.SubElement(html, body) body.text = Text print(etree.tostring(html)bText br = etree.SubElement(body, br) print(etree.tostring(html)bText# tail仅在该标签后面追加文本 br.tail = Tail print(etree.tostring(br)bTail print(etree.tostring(html)bTextTail# tostring方法增加method参数,过滤单一标签,输出全部文本 print(etree.tostring(html, method=text)bTextTail2、XPath方式# 方式一:过滤单一标签,返回文本 print(html.xpath(string()TextTail# 方式二:返回列表,以单一标签为分隔 print(html.xpath(/text()Text, Tail方法二获得的列表,每个元素都会带上它所属节点及文本类型信息,如下: texts = html.xpath(/text() print(texts0)Text# 所属节点 parent = texts0.getparent() print(parent.tag)body print(texts1, texts1.getparent().tag)Tail br# 文本类型:是普通文本还是tail文本 print(texts0.is_text)True print(texts1.is_text)False print(texts1.is_tail)True文件解析与输出这一节回答问题1。这部分讲述如何将XML文件解析为Element对象,以及如何将Element对象输出为XML文件。1、文件解析文件解析常用的有fromstring、XML和HTML三个方法。接受的参数都是字符串。 xml_data = data# fromstring方法 root1 = etree.fromstring(xml_data) print(root1.tag)root print(etree.tostring(root1)bdata# XML方法,与fromstring方法基本一样 root2 = etree.XML(xml_data) print(root2.tag)root print(etree.tostring(root2)bdata# HTML方法,如果没有和标签,会自动补上 root3 = etree.HTML(xml_data) print(root3.tag)html print(etree.tostring(root3)bdata2、输出输出其实就是前面一直在用的tostring方法了,这里补充xml_declaration和encoding两个参数,前者是XML声明,后者是指定编码。 root = etree.XML() print(etree.tostring(root)b# XML声明 print(etree.tostring(root, xml_declaration=True)bn# 指定编码 print(etree.tostring(root, encoding=iso-8859-1)bnElementPath这一节回答问题2。讲ElementPath前,需要引入ElementTree类,一个ElementTree对象可理解为一个完整的XML树,每个节点都是一个Element对象。而ElementPath则相当于XML中的XPath。用于搜索和定位Element元素。这里介绍两个常用方法,可以满足大部分搜索、查询需求,它们的参数都是XPath语句:findall():返回所有匹配的元素,返回列表find():返回匹配到的第一个元素

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论