擅长:python、mysql、java
<p>使用<a href="http://codespeak.net/lxml/" rel="nofollow">lxml</a>。特别是XPath。您可以通过<code>"//layer"</code>和id为<code>id</code>到<code>"//layer[id='{}'][0]".format(id)</code>获得所有<code>layer</code>元素,而不考虑级别。由<code>".../keyword"</code>直接位于一个元素(或多个元素)下的<code>keyword</code>元素(其中<code>...</code>是一个查询,它生成了应该搜索其后代的节点)。在</p>
<p>获取给定节点的深度不是那么简单,但是仍然很容易。我没有找到一个现有的函数(afaik,这超出了XPath的范围-虽然可以检查查询中的深度,但只返回元素,也就是说,可以返回具有特定深度的节点,但不能返回深度本身),所以这里有一个手动生成的函数(不需要递归,因为这不是必需的-但一般来说,使用XML意味着使用递归,不管你喜欢与否公司名称:</p>
<pre><code>def depth(node):
depth = 0
while node.getparent() is not None:
node = node.getParent()
depth += 1
return depth
</code></pre>
<p>如果您愚蠢到不使用现有最好的pythonxml库,那么DOM也可能出现类似的情况;)</p>