execute an XPath and get the line numbers

I’m investigating the structure of an XML file. The best tool is an usual text editor (vim), but I need to look at some specific tags in some specific contexts. The idea is to execute an XPath and somehow to get to the location in the editor. Remembering that I saw something interesting while playing with libxml internals, I re-checked… And bingo! I’ve written a script which executes an XPath and prints the result together with the line number of the source XML file.

Usage:

python xpath.py document xpath

Code:

import sys,libxml2

doc_name = sys.argv[1]
xpath    = sys.argv[2]

print doc_name, xpath
doc  = libxml2.parseFile(doc_name)
ctxt = doc.xpathNewContext()
res  = ctxt.xpathEval(xpath)
for node in res:
  print node.lineNo()
  print node

doc.freeDoc()
ctxt.xpathFreeContext()
del ctxt
del doc

Leave a Reply