我应该使用哪个Python XML库?
我将为一个项目处理XML文件。我之前决定使用lxml,但在阅读了需求之后,我认为ElemenTree更适合我的目的 必须处理的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
我应该配什么?大多数情况下,我看到有人推荐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>"A<!-- comment --><![CDATA[ <note>]]>"</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”