我有一个XML文件(例如jerry.xml),其中包含一些数据,如下所示.
<data>
<country name="Peru">
<rank updated="yes">2</rank>
<language>english</language>
<currency>1.21$/kg</currency>
<gdppc month="06">141100</gdppc>
<gdpnp month="10">2.304e+0150</gdpnp>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<language>english</language>
<currency>4.1$/kg</currency>
<gdppc month="05">59900</gdppc>
<gdpnp month="08">1.9e-015</gdpnp>
<neighbor name="Malaysia" direction="N"/>
</country>
我使用下面的代码从上面的xml中提取了一些选定文本的完整路径.原因在post中给出.
def extractNumbers(path, node):
nums = []
if 'month' in node.attrib:
if node.attrib['month'] in ['05', '06']:
return nums
path += '/' + node.tag
if 'name' in node.keys():
path += '=' + node.attrib['name']
elif 'year' in node.keys():
path += ' ' + 'month' + '=' + node.attrib['month']
try:
num = float(node.text)
nums.append( (path, num) )
except (ValueError, TypeError):
pass
for e in list(node):
nums.extend( extractNumbers(path, e) )
return nums
tree = ET.parse('jerry.xml')
nums = extractNumbers('', tree.getroot())
print len(nums)
print nums
这给了我需要改变的元素的位置,如下面csv的colomn 1所示(例如hrong.csv).
Path Text1 Text2 Text3 Text4 Text5
'/data/country name=singapore/gdpnp month=08'; 5.2e-015; 2e-05; 8e-06; 9e-04; 0.4e-05;
'/data/country name=peru/gdppc month=06'; 0.04; 0.02; 0.15; 3.24; 0.98;
我想根据第1列中元素的位置,用上面hrong.csv的第2列中的元素替换原始XML文件(jerry.xml)元素的文本.
我是python的新手,并意识到我可能没有使用最好的方法.我很感激任何有关方向的帮助.我基本上只需解析一些xml文件的选定文本节点,修改所选文本节点并保存每个文件.
谢谢
解决方法:
您应该能够使用模块的XPath功能来执行此操作:
import xml.etree.ElementTree as ET
tree = ET.parse('jerry.xml')
root = tree.getroot()
for data in root.findall(".//country[@name='singapore']/gdpnp[@month='08']"):
data.text = csv_value
tree.write("filename.xml")
因此,您需要重写csv中的路径以匹配为模块定义的XPath规则(请参阅Supported XPath rules).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。