【发布时间】:2011-05-04 22:18:17
【问题描述】:
我想使用 xpath 使用 Python 的 libxml2 解析 XML 内容,我关注了 this example 和 that tutorial。 XML 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://purl.org/atom/ns#" version="0.3">
<title>Gmail - Inbox for myemailaddress@gmail.com</title>
<tagline>New messages in your Gmail Inbox</tagline>
<fullcount>1</fullcount>
<link rel="alternate" href="http://mail.google.com/mail" type="text/html"/>
<modified>2011-05-04T18:56:19Z</modified>
</feed>
此 XML 存储在一个名为“atom”的文件中,我尝试以下操作:
>>> import libxml2
>>> myfile = open('/pathtomyfile/atom', 'r').read()
>>> xmldata = libxml2.parseDoc('myfile')
>>> data.xpathEval('/fullcount')
[]
>>>
现在你可以看到它返回一个空列表。无论我可以为 xpath 提供什么,它都会返回一个空列表。但是,如果我使用 * 通配符,我会得到所有节点的列表:
>>>> data.xpathEval('//*')
[<xmlNode (feed) object at 0xb73862cc>, <xmlNode (title) object at 0xb738650c>, <xmlNode (tagline) object at 0xb73865ec>, <xmlNode (fullcount) object at 0xb738660c>, <xmlNode (link) object at 0xb738662c>, <xmlNode (modified) object at 0xb738664c>]
现在我不明白,从上面的工作示例来看,为什么 xpath 找不到“fullcount”节点或任何其他节点:毕竟我使用的是相同的语法......
有什么想法或建议吗?谢谢。
【问题讨论】:
-
我为什么要这样做? :) 我现在正在查看 lxml 文档。谢谢。
-
它是 libxml2 的绑定。我什至不知道有替代绑定,但 lxml 非常直观。