我是Python的新手,我想知道如何使用python实现以下功能。
我有一个XML文件,我想打开该文件,并且必须为标记设置新值。
如果在更新期间出现任何故障,则文件将进入原始状态
FileName:ABC.xml
<Root>
<Location>
<city>WrongCity</city>
<state>WrongState</state>
<country>WrongCountry</country>
</Location>
</Root>
将文件路径传递给某个函数。
def correctValues(filepath)
# update the wrong information
try:
set city = MYcity
set state = somevalue
set country = somedata
except:
Rollback to original file
如果值更新期间没有问题,则原始文件需要使用更正的值更新。
预期产出:
<Root>
<Location>
<city>MYcity</city>
<state>somevalue</state>
<country>somedata</country>
</Location>
</Root>
如果出现任何问题,该文件应该回滚。
提前致谢。
答案 0 :(得分:0)
最简单的方法可能是:
调用库将XML解析为实际的节点树;
修改那棵树然后你需要;以及
将新树写回。
使用&#34; bs4&#34; (它有一些问题,但通常就足够了),它看起来像是:
from bs4 import BeautifulSoup as BS
import codecs
badCityDict = { # List of corrections
"Washingtun": "Washington",
"Bolton": "Boston"
}
# Second parameter to constructor picks what parser bs4 should use.
tree = bs4(codecs.open(myfile, mode='r', encoding='utf-8'), 'lxml')
changeCount = 0
cityNodes = tree.find_all('city')
for cn in cityNodes:
cnText = cn.string.strip()
if cnText in badCityDict:
cn.string.replace_with(badCityDict[cnText])
changeCount += 1
### same thing for state, country, and so on...
if (changeCount > 0):
print tree.prettify()