Python是否有类似于LINQ to XML的功能?
我需要解析一个XML文件,并把结果放到HTML表单上,但我对Python还很陌生。Python 2.7有没有类似C#中LINQ to XML的东西,或者有什么好的XML库可以推荐给我吗?
3 个回答
在Python中,最常用的XML库是lxml,详细信息可以查看http://lxml.de,不过我知道它不支持LINQ接口。
你可以使用ElementTree接口来处理XML,具体可以参考http://lxml.de/tutorial.html#the-elementtree-class。
另外,你也可以使用XPath选择器来提取数据,相关信息在这里http://lxml.de/xpathxslt.html#xpath。
还有CSS选择器也可以用来提取XML中的数据,详情请看http://lxml.de/cssselect.html。
看看lxml,特别是它的几个组合:
- ElementTree接口:这是一个比DOM更简单的XML模型/API,类似于XDocument和XElement类(属性和文本更简单,因为它们不是单独的“节点”,如果你经常处理“混合内容”模型,可能一开始会觉得有点奇怪,因为你习惯了DOM接口)
- lxml.builder的E-factory(就像LINQ to XML中的“函数式构造”,但更好;-))
- Python内置的列表推导和生成器表达式,这让你可以非常接近LINQ查询语法(不过看起来不像SQL;-))
... 这些组合会给你带来非常相似的体验。(我也玩过.NET中的LINQ to XML:我更喜欢用Python和lxml来工作)
还有一点:lxml对HTML(甚至是格式不正确的HTML)也有很好的支持,包括填写HTML表单的功能(不过我不确定这是否就是你所说的“把结果放到HTML表单上”)
看看Pynq吧——它是一个将Python语言和查询结合起来的工具,详细信息可以在这里找到:https://github.com/heynemann/pynq/wiki
不过我不太确定Pynq是否足够满足你的需求,尽管它在Python中实现了表达式树,和C#中的LINQ有点类似。
如果你想在Python中简单地处理XML,可以试试BeautifulSoup,这里有它的文档:http://www.crummy.com/software/BeautifulSoup/documentation.html。注意:处理XML时,使用BeautifulStoneSoup
。
举个简单的例子:“找到前面三个a标签”
soup.findAll('p', limit=3)
如果你想了解更多关于Python的XML库,可以查看PythonInfo Wiki中的"PythonXml"。