<p>我对Python和编程有点陌生,所以我很抱歉。顺便说一下,谢谢。在</p>
<p>我正在使用Python2.5、cElementTree和expat解析一个xml文档(kml专门用于Google Earth)。我试图从每个“placemark”节点内的“name”、“description”和“coordinates”节点中提取每个几何体类型(即折线、多边形、点)的所有文本,但我希望保持几何体类型的独立性。例如,我只需要“name”、“description”和“coordinates”文本作为“polygon”的一部分(即它有一个“polygon”节点)。我将需要这样做的'折线'和'点'。我已经找到了一种方法来实现这一点,但是代码很冗长,而且针对每种几何类型都是特定的,这就引出了我的问题。在</p>
<p>理想情况下,我希望对每个几何体类型使用相同的代码,但问题是每个几何体类型都有不同的节点结构(即不同的节点名称和嵌套节点的数量)。因此,为了验证概念,我认为这是一个很好的机会,可以使用/学习递归来深入“placemark”节点的节点树并获得我要查找的信息。我看过很多关于Python递归的文章,但是在实现所提供的解决方案方面仍然存在问题。在</p>
<p>“placemark”节点的示例xml是:</p>
<pre><code> <Placemark>
<name>testPolygon</name>
<description>polygon text</description>
<styleUrl>#msn_ylw-pushpin</styleUrl>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-81.4065,31.5072,0 -81.41269,31.45992,0 -81.34490,31.459696,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</code></pre>
<p>我使用的递归函数是:</p>
^{pr2}$
<p>我调用递归函数如下:</p>
<pre><code>searchNode = 'coordinates'
# loop through all 'Placemark nodes' in document
for mark in placemark:
# Get children of 'Placemark' node
children = mark.getchildren()
# Loop through children nodes
for child in children:
# if a 'Polygon' node is found
if child.tag == 'Polygon':
# call recursion function
getCoords( child, searchNode)
</code></pre>
<p>我知道,至少,我的部分问题是返回值。其他帖子建议返回该函数,我将其解释为“return getCoords(child,searchNode),但我得到了一个无休止的循环。另外,我意识到这可以张贴在地理信息系统网站上,但我认为这是一个更一般的编程问题。有什么想法吗?在</p>