这是我的 xml 文件:
<?xml version="1.0" encoding="UTF-8" ?>
<raml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="raml21.xsd">
<cmData type="actual" scope="all" name="plan_file">
<header>
<log dateTime="2011-05-18T04:05:02" action="created" />
</header>
<managedObject class="Fruit">
<p name="Apple">100</p>
<p name="Mango">4</p>
<p name="Pear">99</p>
<p name="Jackfruit">67</p>
<p name="Strawberry">200</p>
<p name="Guava">100</p>
<p name="Banana">100</p>
<p name="Breadfruit">1500</p>
<p name="Musambi">100</p>
</managedObject>
</cmData>
</raml>
我需要做的是。我需要用另一个数字替换给定属性的文本节点(100、4、99)(在运行时通过 python shell 输入)。我一次只需要更改一个文本节点(也通过贝壳)。我需要一个带有更改值的单独 xml 文件。
我写了这样的python脚本:
from xml.dom import minidom
import os.path
def new_value(parameter, parameter_value, target_dir, inputfile):
count = len(open(inputfile).readlines())
dom = minidom.parse(inputfile)
name = dom.getElementsByTagName('p')
inFile = open(inputfile,'r')
fullname = os.path.join(target_dir, "test" + str(parameter_value) + ".xml")
outFile = open(fullname,'w')
for i in range(count):
content = inFile.readline()
matchobj = re.search(parameter, content)
if(matchobj):
newcontent = content.replace(name[2].firstChild.nodeValue, str(parameter_value))
outFile.write(newcontent)
else:
outFile.write(content)
outFile.close()
parameter = input("Enter the parameter: ")
target_dir = input("Enter the target directory: ")
input_file = input("Enter the input file: ")
parameter_value = input("Enter the value to replace: ")
new_value(parameter, parameter_value, target_dir, input_file)
在这里,因为我使用的是表达式,
newcontent = content.replace(name[2].firstChild.nodeValue, str(parameter_value))
此脚本正在运行但使用此脚本(因为我使用的是名称 [2]),我只能更改 xml 文件的索引 2,即 Pear。如果我写的是 1 而不是 2,我可以更改芒果等。但我需要使脚本通用。我该如何修改脚本???
感谢您的帮助.. :)