好久也没写py了,有点手生了,贴下来加深记忆,也不是很复杂的东西,就是自己以前结合资料做的笔记
读写操作
etree.fromstring( string )
将 string 解析为 Element 或者 ElementTree 。
etree.parse( file )
将文件或者是 file_like 对象解析为 ElementTree
因为 parse() 一般解析整篇文档,字符串解析函数一般只解析片段。其中 file 还可以是 HTTP/FTP URL
XML( text ) / HTML( text )
比较直接的对 XML 和 HTML 文档进行特定解析,可以修改解析器 parser 参数,其中 parser 可以由相应的 XMLParser() / HTMLParser() 函数生成
etree.tostring( elt )
将一个 Element 或者 ElementTree 转换为 string 形式
可选参数:pretty_print=False 表示是否格式化提高可读性;
method=”xml” 选择输出后的文档格式
可选参数有 xml 、html 、text
encoding=None 表示以什么编码的字符串输出,在无 xml 文档声明情况下默认是 ASCⅡ
ElementTree.write( file )
是 ElementTree 特有的方法,是将 ElementTree 写到 a file, a file-like object, or a URL (via FTP PUT or HTTP POST) 。可选参数和 tostring() 差不多
Element 的属性
- .tag
元素的名称
- .attrib
一个包含元素属性的字典,key 是属性名,value 是对应的值。
- .text
Element 的文本均为直接子文本,不包含子元素中的文本,这其中又包含两部分 .text 和 .tail 。.text 是第一个子元素标签之前的,如果没有则为 None 。
- .tail
.tail 为 Element 的关闭标签之后的文本,并且是在下一个兄弟子标签之前的部分。没有则为 None 。
Element 的方法
- append( child )
添加一个新的子节点(可以是 Element 、Comment)到当前 Element 中。
- clear()
调用该函数,将移除所有内容 .attrib 将被移除 .text 和 .tail 将被设置为 None 所有的子节点将被删除。
- remove( child )
将子节点 child 从Element 中移除 ,如果child 不是 Element 的子节点,将会引发 ValueError 异常。
- find( path )
从 Element 的子元素及后代元素中查找第一个符合 path 的 subelement 。如果没有返回 None 。
ElementPath 是 ElementTree 自带的一个 XPath-like 的路径语言,和 XPath 差不太多,主要区别是 ElementPath 能用 {namespace}tag,但是 ElementPath 不能使用值比较和函数。
- findall( path )
返回一个匹配的 Element 的列表。
- findtext( path, default=None )
返回第一个匹配元素的 .text 内容,如果存在匹配,但是没有 .text 内容,那么将返回一个空字符串,如果没有一个匹配的元素,那么将会返回一个 None ,但是有 default 参数,返回 default 所指定的。
- get( key, default=None )
返回字符串形式的 属性 key 的值,没有返回 None 或者 default 指定的。
- getchildren()
返回一个包含 Element 子元素的列表。
- getiterator( tag=None, *tags )
返回元素的一个生成器,返回元素类别取决于参数 tag ,生成顺序是in document order (depth first pre-order) 深度优先的先根遍历。如果没有参数的话,则第一个就是元素本身。如果想使用一个高效的生成器,可以使用 .iter() 。
- getroottree()
返回该元素的 ElementTree 。
- iter( tag=None, *tags )
过滤特定标签,生成迭代器。默认情况下,iter() 迭代所有的节点,包括PI(处理指令) 、Comment(注释) 等,如果只想迭代标签元素,可以使用 Element factory 做参数e.iter(tag = etree.Element)。
- iterfind( path )
迭代所有匹配 ElementPath 的 Element 。
- itertext( tag=None, *tags, with_tail=True )
迭代 Element 元素的文本内容,with_tail 参数决定是否迭代子元素的 tail 。Element 的tail 不会进行迭代。
- iterancestors( tag=None )
如果忽略参数,那么将会迭代所有先辈,加标签名可以只迭代该标签先辈。
- iterchildren( reversed=False, tag=None )
通过设置 reversed=True 可以以反向的顺序迭代子元素。
- itersiblings( preceding=False )
迭代 Element 之后的兄弟元素,可以通过设置 preceding=True 仅迭代 Element 之前的兄弟元素。
- iterdescendants( tag=None )
同 iterancestors()
- items()
返回由元素属性的键值所构成的( name, value)元组的列表。
- keys()
返回一个没有特定顺序的元素属性名的列表。
- set(A, V)
创建或者改变属性 A 的值为 V。