Python XML元素的打印索引

Python XML元素的打印索引,python,xml,lxml,Python,Xml,Lxml,我想编写一个小型实用程序,它将执行以下操作: 读取XML文件 对于任何输入参数,打印与之匹配的所有元素的完整路径 e、 g.对于以下XML文件: <?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank>1</rank> <year>2008</year> <gdppc>

我想编写一个小型实用程序,它将执行以下操作:

  • 读取XML文件
  • 对于任何输入参数,打印与之匹配的所有元素的完整路径
e、 g.对于以下XML文件:

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
    </country>
    <town name="London">
        <year>2014</year>
    </town>
</data>

最简单的方法是正则表达式

#!/usr/bin/python
from lxml import etree
import sys
import re

tree=etree.parse('file.xml')
tag = '//' + sys.argv[1]
find_text = etree.XPath(tag)
for j in  [tree.getpath(text) for text in find_text(tree)]:
    print re.sub(r'[\/\[\]]+', '.', j)[1:] # this will change [ / and ] to a dot.
输出:
data.country.1.year

现在打印什么?它打印以下内容:data.country.year data.country.year data.town.year抱歉!它打印以下内容:data.country[1]。year data.country[2]。year data.town.year,所以索引已经存在。不知道我怎么会错过
#!/usr/bin/python
from lxml import etree
import sys
import re

tree=etree.parse('file.xml')
tag = '//' + sys.argv[1]
find_text = etree.XPath(tag)
for j in  [tree.getpath(text) for text in find_text(tree)]:
    print re.sub(r'[\/\[\]]+', '.', j)[1:] # this will change [ / and ] to a dot.