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文件
- 对于任何输入参数,打印与之匹配的所有元素的完整路径
<?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.