1

我是 Python 新手,我想知道如何使用 Python 实现以下目标。

我有一个 XML 文件,我想打开该文件并且必须为 tag 设置新值。

如果在更新过程中出现任何故障,则文件将变为原始状态

文件名: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>

如果出现任何问题,文件应该回滚。

提前致谢。

4

1 回答 1

0

最简单的方法可能是:

  1. 调用库将 XML 解析为实际的节点树;

  2. 根据需要修改该树;和

  3. 将新树写回。

使用“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()
于 2015-10-08T21:35:02.147 回答