XPath正在踢我的垃圾。我不确定为什么让它变得如此困难。我在下面粘贴我正在尝试的内容,以及文档中的一些引用。
已清理的文件:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Document>
<Style id="PolyStyle70412"></Style>
<Folder>
<Placemark id="default_starting_location"></Placemark>
<Folder>
<name>LandParcels</name>
<visibility>0</visibility>
<Folder>
<name>LandParcels batch 1-2</name>
<visibility>0</visibility>
<Document id="LandParcels" xsi:schemaLocation="http://www.opengis.net/kml/2.2 http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd http://www.google.com/kml/ext/2.2 http://code.google.com/apis/kml/schema/kml22gx.xsd">
<name>LandParcels</name>
<visibility>0</visibility>
<Snippet maxLines="0"></Snippet>
<description>text</description>
<Style id="PolyStyle70"></Style>
<Folder id="FeatureLayer7">
<Placemark id="ID_70000">
<name>12345678</name>
<MultiGeometry>
<coordinates>100,200</coordinates>
</MultiGeometry>
</Placemark>
</Folder>
</Document>
</Folder>
</Folder>
</Folder>
</Document>
</kml>
问题和预期结果:
>>> from lxml import etree
>>> doc = etree.parse('/path/to/file.xml')
>>> print doc.xpath('Placemark') # Returns an empty list
根据the xpath syntax,上述内容应选择标记为“地标”的所有节点。
>>> print doc.xpath('//Placemark') # Returns an empty list
根据相同的来源,无论文档在何处,都应选择所有节点。
>>> print doc.xpath('/kml') # Returns an empty list
同样,这应该选择根节点......没有任何作用!
嗯,这很有效:
>>> print doc.xpath('/*') # Returns the kml node
>>> print doc.xpath('/*/*') # Returns the Document node
好的,所以我知道最后一个不是假设获取Document节点的方式,但是因为我们有它,我尝试从那里开始并向下钻取以获取坐标:
>>> print doc.xpath('/*/*/Folder/Folder/Folder/Document/Folder/Placemark/MultiGeometry/coordinates') # Returns an empty list
我也尝试了很多其他的事情。除了斜线星形语法之外什么都没有用?是的,我已经尝试了很多StackOverflow搜索,人们给出了玩具xml文件和一些代码,然后我将其粘贴并且有效。但是为什么我的文件不能得到任何好结果呢?
最终我试图提取这些节点:
/kml/Document/Folder/Folder/Folder/Document/description
/kml/Document/Folder/Folder/Folder/Document/Folder/Placemark/MultiGeometry/coordinates