python之lxml快速上手_ElementTree(三)

The ElementTree class

ElementTree主要是作为一个包含根节点的“树(tree)”的文档包裹(document wrapper)。它提供了多个成对的序列化和常规文档处理方法:

>>> root = etree.XML('''\
... <?xml version="1.0"?>
... <!DOCTYPE root SYSTEM "test" [ <!ENTITY tasty "parsnips"> ]>
... <root>
...   <a>&tasty;</a>
... </root>
... ''')

>>> tree = etree.ElementTree(root)
>>> print(tree.docinfo.xml_version)
1.0
>>> print(tree.docinfo.doctype)
<!DOCTYPE root SYSTEM "test">

>>> tree.docinfo.public_id = '-//W3C//DTD XHTML 1.0 Transitional//EN'
>>> tree.docinfo.system_url = 'file://local.dtd'
>>> print(tree.docinfo.doctype)
<!DOCTYPE root PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "file://local.dtd">

你调用parse()方法(只需传递参数:文件(files)、或类文件对象(file-like object))所获取的结果也是一个ElementTree
很重要的一个的不同是,ElementTree是作为一个完整的文档来序列化的。这其中包括processing instructions(处理指令)、comments(注释)、以及DOCTYPE (文档声明)和其他DTD的内容。

>>> print(etree.tostring(tree))  # lxml 1.3.4 and later
<!DOCTYPE root PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "file://local.dtd" [
<!ENTITY tasty "parsnips">
]>
<root>
  <a>parsnips</a>
</root>

在最初的xml.etree.ElementTree实现中,直到lxml 1.3.3,当你仅仅序列化根节点元素时,输出看起来是一样的:

>>> print(etree.tostring(tree.getroot()))
<root>
  <a>parsnips</a>
</root>

序列化行为在lxml 1.3.4中已经发生了改变。之前,“树”的序列化是不包含DTD内容的,这也使得lxml在输入输出循环中丢失了DTD信息。

从字符或文件中解析(Parsing from strings and files)

lxml.etree支持多种方式解析XML,包括所有重要的数据源,命名字符、文件、URLs(http/ftp)和类文件对象。主要的解析方法是fromstring()parse(),两者都接受“数据源”作为第一个参数。默认情况下,它使用标准的解析器,但你随时都可以传递一个不同的解析器(作为第二个参数)。

The fromstring() function

fromstring()是从字符串解析的最简单办法:

>>> some_xml_data = "<ro
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值