我将XML文件作为输入,必须使用关键字GENTEST05
进行搜索。
如果找到,那么我需要选择其父节点(在此示例中,我想要选择<ScriptElement>
),然后用新内容替换完整节点<ScriptElement>blahblah</ScriptElement>
。
...
...
<ScriptElement>
<ScriptElement>
<ScriptElement>
<ElementData xsi:type="anyData">
<DeltaTime>
<Area>
<Datatype>USER PROMPT [GENTEST05]</Datatype>
<Description />
<Multipartmessage>False<Multipartmessage>
<Comment>false</Comment>
</ElementData>
</ScriptElement>
<ScriptElement>
<ScriptElement>
...
...
...
我正在尝试使用Beautifulsoup。这是我到目前为止所做的,但没有得到正确的方法继续。除了beautifulsoup,ElementTree或任何其他建议是受欢迎的。
import sys
from BeautifulSoup import BeautifulStoneSoup as bs
xmlsoup = bs(open('file_xml' , 'r'))
a = raw_input('Enter Text')
paraText = xmlsoup.findAll(text=a)
print paraText
print paraText.findParent()
答案 0 :(得分:0)
这里有一些示例代码可以帮助您入门。我使用了ElementTree,因为它是一个内置模块,非常适合这类任务。
这是我使用的XML文件:
<?xml version="1.0" ?>
<Script>
<ScriptElement/>
<ScriptElement/>
<ScriptElement>
<ElementData>
<DeltaTime/>
<Area/>
<Datatype>USER PROMPT [GENTEST05]</Datatype>
<Description/>
<Multipartmessage>False</Multipartmessage>
<Comment>false</Comment>
</ElementData>
</ScriptElement>
<ScriptElement/>
<ScriptElement/>
</Script>
这是python程序:
import sys
import xml.etree.ElementTree as ElementTree
tree = ElementTree.parse("test.xml")
root = tree.getroot()
#The keyword to find and remove
keyword = "GENTEST05"
for element in list(root):
for sub in element.iter():
if sub.text and keyword in sub.text:
root.remove(element)
print ElementTree.tostring(root)
sys.exit()
我保持程序简单,以便您可以改进它。由于您的XML有一个根节点,我假设您要将关键字匹配元素的所有父元素直接删除到根。在ElementTree中,您可以调用root.remove()来删除作为关键字匹配元素的祖先的<ScriptElement>
元素。
这只是为了让你开始:这只会删除第一个元素,然后打印生成的树并退出。
输出:
<Script>
<ScriptElement />
<ScriptElement />
<ScriptElement />
<ScriptElement />
</Script>