Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该使用哪个Python XML库?_Python_Lxml_Celementtree - Fatal编程技术网

我应该使用哪个Python XML库?

我应该使用哪个Python XML库?,python,lxml,celementtree,Python,Lxml,Celementtree,我将为一个项目处理XML文件。我之前决定使用lxml,但在阅读了需求之后,我认为ElemenTree更适合我的目的 必须处理的XML文件包括: 体积小。通常示例_XML=“” ... ... …弗雷德 ... 54321 ... 12345 …“A]]>” ... ... ... """ >>>地址簿=xml2obj(示例XML) >>>person=地址 person.gender->“m”是一个属性 person['gender']->'m'#可选字典语法 p

我将为一个项目处理XML文件。我之前决定使用lxml,但在阅读了需求之后,我认为ElemenTree更适合我的目的

必须处理的XML文件包括:

  • 体积小。通常<10kb

  • 没有名称空间

  • 简单的XML结构

  • 由于XML的大小很小,内存不是问题。我唯一关心的是快速解析


    我应该配什么?大多数情况下,我看到有人推荐lxml,但考虑到我的解析需求,我真的能从中受益吗?或者ElementTree能更好地满足我的需求吗?

    lxml基本上是ElementTree的超集,所以你可以从ElementTree开始,然后如果你有性能或功能问题,你可以改为lxml


    性能问题只能由您使用自己的数据来研究,

    正如其他人指出的那样,lxml实现了ElementTree API,因此如果您需要更好的性能或更高级的功能,您可以安全地从ElementTree开始,并迁移到lxml


    如果使用ElementTree满足您的需要,那么它的最大优点是,从Python 2.5开始,它就减少了外部依赖性和(可能)处理编译/安装C模块的麻烦。

    我推荐我自己的方法

    它不会加快解析速度。但它提供了一种真正的原生对象样式的访问

    >>> SAMPLE_XML = """<?xml version="1.0" encoding="UTF-8"?>
    ... <address_book>
    ...   <person gender='m'>
    ...     <name>fred</name>
    ...     <phone type='home'>54321</phone>
    ...     <phone type='cell'>12345</phone>
    ...     <note>&quot;A<!-- comment --><![CDATA[ <note>]]>&quot;</note>
    ...   </person>
    ... </address_book>
    ... """
    >>> address_book = xml2obj(SAMPLE_XML)
    >>> person = address_book.person
    
    
    person.gender        -> 'm'     # an attribute
    person['gender']     -> 'm'     # alternative dictionary syntax
    person.name          -> 'fred'  # shortcut to a text node
    person.phone[0].type -> 'home'  # multiple elements becomes an list
    person.phone[0].data -> '54321' # use .data to get the text value
    str(person.phone[0]) -> '54321' # alternative syntax for the text value
    person[0]            -> person  # if there are only one <person>, it can still
                                    # be used as if it is a list of 1 element.
    'address' in person  -> False   # test for existence of an attr or child
    person.address       -> None    # non-exist element returns None
    bool(person.address) -> False   # has any 'address' data (attr, child or text)
    person.note          -> '"A <note>"'
    
    >示例_XML=“”
    ... 
    ...   
    …弗雷德
    ...     54321
    ...     12345
    …“A]]>”
    ...   
    ... 
    ... """
    >>>地址簿=xml2obj(示例XML)
    >>>person=地址
    person.gender->“m”是一个属性
    person['gender']->'m'#可选字典语法
    person.name->“fred”#文本节点的快捷方式
    person.phone[0]。键入->“home”#多个元素成为一个列表
    person.phone[0]。数据->“54321”#使用.data获取文本值
    str(person.phone[0])->“54321”#文本值的可选语法
    person[0]->person#如果只有一个,它仍然可以
    #将其用作1个元素的列表。
    “地址”亲自->假#测试是否存在属性或子项
    person.address->None#不存在元素返回None
    bool(person.address)->False#有任何“地址”数据(attr、child或text)
    person.note->“A”