2016-03-07 90 views
1

我有数以千计的应用程序名称的行中的XML文件:如何在xml中搜索关键字并用Python替换它的值?

<app name="app-sq-461-author-core-0"> 

我要做到以下几点:

  1. 检查通过的所有行是“应用程序名称”存在
  2. 如果是这样,看看是否值匹配“测试”
  3. 如果是的话,请用值“删除我”

目前,我有:

bare = importedxml.find('app name') 
testvalue = bare.split("=")[1] 
if testvalue = "test" in importedxml: 
    testvalue = "delete me" 

这样做的最佳方法是什么?我遇到很多问题。

回答

2

您试过BeautifulSoup? 东西沿着这些线路

import bs4 

xml = "Your bare XML String" 
soup = bs4.BeautifulSoup(xml) 
test_apps = soup.findChildren("app", {"name": "test"}) 
for app in test_apps: 
    app["name"] = "delete me" 

with open("filename.xml", "w") as f: 
    f.write(str(soup)) 

但是,正如你所提到的在你的评论如下,你没有BS4,我能想到的唯一的事情就是使用正则表达式替换。

import re 

xml = "your XML String" 
pattern = re.compile('app name="test"') 
replaced = pattern.sub('app name="delete me"', xml) 
+0

是啊,我真的想切换到美丽的汤,这个问题越来越我工作的地方批准。所以现在,我无法使用它。 – david

+0

哎唷!看到我的更新。 –

0
sed 's/<app name="foo">/<app name="bar">/g' <file.xml> file.xml.new 
mv file.xml file.xml.old 
mv file.xml.new file.xml 
+0

你怎么知道,那op有一台* nix机器? –

+0

我不知道。命令语法应该足够相似,不是吗?即使op的机器根本没有sed,操作的目的也很明确。 –