我有2个Python脚本写入同一个XML文件。我正在使用Python2.5和WinXP。 如何创建模板,以便在运行其他Python脚本时不会覆盖XML文件。它只会使用值更新XML中的部分。例如:XML模板如下:
<Test>
<Default>
<Value>1</Value>
<Link_Status>0</Link_Status>
<Lane_Status>1</Lane_Status>
</Default>
<Settings>
<Point>4</Point>
<Delay>1</Delay>
</Settings>
</Test>
我希望default.py更新为Default部分,而Settings.py更新设置部分。感谢你的建议。 TQ
Default.py代码:
import elementtree.ElementTree as ET
root=ET.Element("Test")
head1=ET.SubElement(root,"Default")
title=ET.SubElement(head1,"Value")
title.text="1"
title=ET.SubElement(head1,"Link_Status")
title.text="0"
title=ET.SubElement(head1,"Lane_Status")
title.text="1"
tree=ET.ElementTree(root)
tree.write("C:\Python25\myscript\cmm\\config.xml")
Settings.py代码:
import elementtree.ElementTree as ET
root=ET.Element("Test")
head2=ET.SubElement(root,"Settings")
title=ET.SubElement(head2,"Point")
title.text=("4")
title=ET.SubElement(head2,"Delay")
title.text=("1")
tree=ET.ElementTree(root)
tree.write("C:\Python25\myscript\cmm\\config.xml")
答案 0 :(得分:1)
阅读并更新特定部分而不是整个文件,如下所示
from xml.etree import ElementTree as ET
with open("test.xml") as f:
root = ET.parse( f ).getroot()
# update <Default>
root.remove( root.find("./Default") )
defaultNode = ET.SubElement(root,"Default")
ET.SubElement(defaultNode,"Value").text = "999"
ET.SubElement(defaultNode,"Link_Status").text = "888"
ET.SubElement(defaultNode,"Lane_Status").text = "777"
with open("test.xml" , "w" ) as f:
f.write( ET.tostring( root ) )
----编辑添加新内容 -
实际上,我只是想告诉你如何阅读文件并更新某些部分,然后将其写出来,而不必每次都创建一个新的xml内容。好的,如果您的xml结构是静态的,您可以通过使用XPATH定位来更新特定文本,也许以下一个可以解决您的小问题。
from xml.etree import ElementTree as ET
with open("test.xml") as f:
root = ET.parse( f ).getroot()
# update <Default>
root.find("./Default/Value").text = "999"
root.find("./Default/Link_Status").text = "888"
root.find("./Default/Lane_Status").text = "777"
with open("test.xml" , "w" ) as f:
f.write( ET.tostring( root ) )
顺便说一句,
关于第一个例子,如果我在添加新节点之前没有删除它,你将得到两个节点,这就是为什么我首先使用remove删除旧节点并创建一个新节点。