我有一个值列表(比如一个txt文件),我需要在XML文件中找到它,并将这些值替换为在另一个txt文件中找到的等价新值。我所管理的是逐行读取xml并替换:
for line in open(template_file_name,'r'):
output_line = line
output_line = string.replace(output_line, placeholder, value)
print output_line
看看如何以更有效的方式实现这一目标,
以下是我将使用的XML:
<?xml version="1.0"?>
<sample>
<a>
<id>Value_to_search_for</id>
<class />
<gender />
</a>
</sample>
我想编写一个Python脚本,它将搜索标记'id'并将值“Value_to_search_for”替换为“Replacement_value”。
但是,上述XML的嵌套可能会发生变化。所以我想制作一个通用脚本,它将独立于其确切位置搜索标签'id'。
答案 0 :(得分:0)
from lxml import etree as et
def replace_tag_text_from_xml_file(xml_file_path,xpath,search_str,replacement_str):
root = et.parse(xml_file_path)
id_els = root.iterfind(xpath)
for id_el in id_els:
id_el.text = id_el.text.replace(search_str, replacement_str)
return et.tostring(root)
print replace_tag_text_from_xml_file('./test.xml', './/id', 'Value_to_search_for', 'Replacement_value')
答案 1 :(得分:0)
这样的事情怎么样:
placeholder = "Value_to_search_for"
new_value = "New_Value"
for line in open("yourfile.xml"):
output_line = line
if "<id>" in line:
beginning_index = line.index("<id>")
end_index = line.index("</id>")+5 # 5 = The number of characters in '</id>'
output_line = line
output_line = output_line[beginning_index:end_index].replace(placeholder, new_value)
print (output_line)
它会在标记'id'中找到值的开头和结尾的索引,并用新值替换内部的值。