如何创建XML模板?
我有两个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能更新“Settings”这一部分。感谢你的建议。谢谢!
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")
1 个回答
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 ) )
顺便说一下,
关于第一个例子,如果我在添加新内容之前不先删除旧的内容,你会在下面得到两个节点,这就是我先删除旧的再创建新的原因。