2012-11-12 30 views
1

我经常使用非常复杂的文档来进行逆向工程。我需要编写代码来修改某些节点的值,并使用遍历的路径到达作为条件的节点。在Python中获取XML节点的路径

当检查XML数据以了解它的结构时,对此路径进行表示将非常有用。然后,我可以使用代码中的路径来到达特定的节点。

例如,我可以从下面的文档中获得表示目录>书籍>教科书>作者。

Python中是否有任何库允许我这样做?

<xml> 
    <Catalog> 
     <Book> 
      <Textbook> 
       <Author ="James" /> 
      </Textbook> 
     </Book> 
     <Journal> 
      <Science> 
       <Author ="James" /> 
      </Science> 
     </Journal> 
    </Catalog> 
</xml> 
+2

你的意思是你想的方式在节点指向,并找出一个XPath到该节点? – unutbu

+0

是的,就是这样...... –

+0

我知道,它不是python,但是,如果你需要一个快速的方法来解析XML并获得节点的XPath表达式,请尝试这个很好的在线XML编辑器:http://xmlgrid.net/。 ..只需右键单击一个节点并选择“显示XPath” –

回答

1

lxml库有etree.Element.getpath方法(在以前的链接搜索Generating XPath expressions“它返回一个结构,绝对XPath表达式来找到该元素”。这里有一个例子来自lxml库文件:

>>> a = etree.Element("a") 
>>> b = etree.SubElement(a, "b") 
>>> c = etree.SubElement(a, "c") 
>>> d1 = etree.SubElement(c, "d") 
>>> d2 = etree.SubElement(c, "d") 

>>> tree = etree.ElementTree(c) 
>>> print(tree.getpath(d2)) 
/c/d[2] 
>>> tree.xpath(tree.getpath(d2)) == [d2] 
True