我是Python新手,我想知道如何使用Python实现以下功能。
我有一个XML文件,我想打开文件,必须为标签设置新的值。
如果在更新过程中出现任何故障,则文件返回原始状态
文件名: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>
如果有任何问题,文件应该回滚。
最简单的方法可能是:
-
调用库将XML解析为实际的节点树;
-
修改树,但你需要;和
-
把新树写出来
使用"bs4"(有一些问题,但通常是足够的),它看起来像:
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()