zoukankan      html  css  js  c++  java
  • Python 之lxml库学习笔记三

    序列化:

    序列化通常使用tostring()方法来返回一个字符串,或者ElementTree.write()方法来写入一个文件,一个类文件的对象,或者一个URL(通过FTP的PUT或者HTTP的POST)。二者都使用相同的关键字参数比如pretty_print来格式化输出或者encoding来选择一个特定的输出编码而不是简单的ASCII。
    >>> root = etree.XML("<root><a><b/></a></root>")
    >>> etree.tostring(root)
    ’<root><a><b/></a></root>’

    >>> print etree.tostring(root, xml_declaration=True)
    <?xml version=’1.0’ encoding=’ASCII’?>
    <root><a><b/></a></root>

    >>> print etree.tostring(root, encoding="iso-8859-1")
    <?xml version=’1.0’ encoding=’iso-8859-1’?>
    <root><a><b/></a></root>

    >>> print etree.tostring(root, pretty_print=True)
    <root>
    <a>
    <b/>
    </a>
    </root>

    Note that pretty printing appends a newline at the end.

    注意pretty打印在末尾添加一个新行。

    从lxml2.0起,serialisation可以做的不止XML序列化,可以序列化到HTML或者通过传递函数关键字来提取文本内容。

    >>> root = etree.XML("<html><head/><body><p>Hello<br/>World</p></body></html>")
    >>> etree.tostring(root) # default: method = ’xml’
    ’<html><head/><body><p>Hello<br/>World</p></body></html>’
    >>> etree.tostring(root, method="xml") # same as above
    ’<html><head/><body><p>Hello<br/>World</p></body></html>’
    >>> etree.tostring(root, method="html")
    ’<html><head></head><body><p>Hello<br>World</p></body></html>’

    >>> print etree.tostring(root, method="html", pretty_print=True)
    <html>
    <head></head>
    <body><p>Hello<br>World</p></body>
    </html>

    >>> etree.tostring(root, method="text")
    b’HelloWorld’

    对XML序列化而言,默认的文本编码是ASCII

    >>> br = root.find(".//br")
    >>> br.tail = u"W\xf6rld"
    >>> etree.tostring(root, method="text") # doctest: +ELLIPSIS
    Traceback (most recent call last):
    ...
    UnicodeEncodeError: ’ascii’ codec can’t encode character u’\xf6’ ...
    >>>etree.tostring(root, method="text", encoding="UTF-8")
    b’HelloW\xc3\xb6rld’

    >>> etree.tostring(root, encoding=unicode, method="text")
    u’HelloW\xf6rld’

    ElementTree类:

    一个ElementTree主要是围绕在一个有根节点的树的文档包装类。它提供了很多方法来解析,序列化以及一般的文档处理。一个最大的区别是它作为一个整体文档来序列化。与之相对的是序列化成单个的元素。

    >>> tree = etree.parse(StringIO("""\
     <?xml version="1.0"?>
     <!DOCTYPE root SYSTEM "test" [ <!ENTITY tasty "eggs"> ]>
     <root>
     <a>&tasty;</a>
     </root>
     """))
    >>> print(tree.docinfo.doctype)
    <!DOCTYPE root SYSTEM "test">

    >>> # lxml 1.3.4 and later
    >>> print(etree.tostring(tree))
    <!DOCTYPE root SYSTEM "test" [
    <!ENTITY tasty "eggs">
    ]>
    <root>
    <a>eggs</a>
    </root>

    >>> # lxml 1.3.4 and later
    >>> print(etree.tostring(etree.ElementTree(tree.getroot())))
    <!DOCTYPE root SYSTEM "test" [
    <!ENTITY tasty "eggs">
    ]>
    <root>
    <a>eggs</a>
    </root>

    >>> # ElementTree and lxml <= 1.3.3
    >>> print(etree.tostring(tree.getroot()))
    <root>
    <a>eggs</a>
    </root>

    从字符串和文件中解析:

    fromstring()是解析字符串最容易的方法

    >>> some_xml_data = "<root>data</root>"
    >>> root = etree.fromstring(some_xml_data)
    >>> print root.tag
    root
    >>> etree.tostring(root)
    ’<root>data</root>’

    XML()方法和fromstring()方法类似,但它主要用来把XML文字写入源文件。
    >>> root = etree.XML("<root>data</root>")
    >>> print root.tag
    root
    >>> etree.tostring(root)
    ’<root>data</root>’

    parse()方法用来从文件或者类文件对象中解析
    >>> some_file_like = StringIO.StringIO("<root>data</root>")
    >>> tree = etree.parse(some_file_like)
    >>> etree.tostring(tree)
    ’<root>data</root>’

    注意parse()返回的是一个ElementTree对象,而不是字符串解析方法的Element对象。

    >>> root = tree.getroot()
    >>> print root.tag
    root
    >>> etree.tostring(root)
    ’<root>data</root>’

    作者:Shane
    出处:http://bluescorpio.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    A/B test
    镜像下载python包
    Jupyter 快捷键汇总
    牛顿法(Newton's method)VS梯度下降法(Gradient Descent)
    L-BFGS算法详解(逻辑回归的默认优化算法)
    np.bincount()频率统计函数
    异常值检验实战3_NBA球员表现稳定性分析
    异常值检测方法(Z-score,DBSCAN,孤立森林)
    浅谈压缩感知(十六):感知矩阵之RIP
    浅谈压缩感知(十五):感知矩阵之spark常数
  • 原文地址:https://www.cnblogs.com/bluescorpio/p/1749429.html
Copyright © 2011-2022 走看看