0

我尝试在 python 中使用 xpath 进行查询,以便打印 kml 文件的不同部分。

问题是:当我进行查询时,我得到了非常奇怪的结果。

这是我的代码:

import libxml2

rss=libxml2.parseDoc(open('/home/julien/xpath/SUPPORT2.kml').read())
#print doc

node=rss.xpathEval('//Placemark')
print node

这是结果:

[<xmlNode (Placemark) object at 0xa3e2acc>, <xmlNode (Placemark) object at0xa3e2b6c>,     <xmlNode (Placemark) object at 0xa3e2d4c>, <xmlNode (Placemark)
object at 0xa3e2dac>, <xmlNode (Placemark) object at 0xa3e2dec>, <xmlNode 
Placemark) object at 0xa3e2dcc>, <xmlNode (Placemark) object at 0xa3e2d8c>, 
<xmlNode (Placemark) object at 0xa3e2e0c>, <xmlNode (Placemark) object at 
0xa3e2eac>, <xmlNode (Placemark) object at 0xa3e2fec>, <xmlNode (Placemark) 
object at 0xa3e2f0c>, <xmlNode (Placemark) object at 0xa3e2f2c>, <xmlNode 
(Placemark) object at 0xa3e2f4c>, <xmlNode (Placemark) object at 0xa3e2f6c>, 
<xmlNode (Placemark) object at 0xa3e2f8c>]

什么可以解释这个结果?我可以在我的代码中添加什么来使我的查询工作?

4

1 回答 1

0

您得到的结果是 xmlNode 对象的列表。它们显然是正确的结果。您要求 Python 打印(表示)节点列表。xmlNode 对象的字符串表示形式如下:

"<xmlNode (NodeName) object at MemoryAddress>"

但是,您希望将它们视为序列化文本 (" <Placemark> ...")。为了得到它,在列表中的每个 xmlNode 上调用serialize() :

nodeList = rss.xpathEval('//Placemark')
for node in nodeList:
    print node.serialize('utf-8')

这对于向您保证 XPath 结果的内容很有用。但是,如果您正在对这些节点进行进一步处理,则序列化的字符串可能不是您想要的。

另请参阅:使用 Python 的 libxml2 从 XML 节点读取文本

于 2013-02-27T22:09:42.517 回答