从XML中提取特定的标签,并写入到一个新的XML在Python
问题描述:
我有一个这样的XML:从XML中提取特定的标签,并写入到一个新的XML在Python
<Manuscript>
<model defaultValue="data.TotalResult">
<object id="data" path="data">
<condition>
<comparison compare="and">
<operand idref="Context1" type="boolean" />
<operand idref="Context2" type="boolean" />
</comparison>
</condition>
</object>
<condition>
<comparison compare="and">
<operand idref="Context5" type="boolean" />
<operand idref="Context6" type="boolean" />
</comparison>
</condition>
</model>
<condition>
<comparison compare="and">
<operand idref="Context9" type="boolean" />
<operand idref="Context10" type="boolean" />
</comparison>
</condition>
</Manuscript>
我想提取其名称为“条件”的所有标签,串联/追加在一起并创建另一个XML为:
<root>
<condition>
<comparison compare="and">
<operand idref="Context1" type="boolean" />
<operand idref="Context2" type="boolean" />
</comparison>
</condition>
<condition>
<comparison compare="and">
<operand idref="Context5" type="boolean" />
<operand idref="Context6" type="boolean" />
</comparison>
</condition>
<condition>
<comparison compare="and">
<operand idref="Context9" type="boolean" />
<operand idref="Context10" type="boolean" />
</comparison>
</condition>
</root>
任何想法我怎么能做到这一点是Python?
在此先感谢。
答
可以使用BeautifulSoup两个解析和创建所需的新的XML。
看看下面的脚本,并改变它,你才能达到期望的结果希望。
from bs4 import BeautifulSoup as Soup
xml_str = """
<Manuscript>
<model defaultValue="data.TotalResult">
<object id="data" path="data">
<condition>
<comparison compare="and">
<operand idref="Context1" type="boolean" />
<operand idref="Context2" type="boolean" />
</comparison>
</condition>
</object>
<condition>
<comparison compare="and">
<operand idref="Context5" type="boolean" />
<operand idref="Context6" type="boolean" />
</comparison>
</condition>
</model>
<condition>
<comparison compare="and">
<operand idref="Context9" type="boolean" />
<operand idref="Context10" type="boolean" />
</comparison>
</condition>
</Manuscript>
"""
xml_parsed = Soup(xml_str, 'lxml')
output_xml = Soup("", 'lxml')
output_xml.append(output_xml.new_tag('root'))
for condition in xml_parsed.find_all('condition'):
output_xml.find('root').append(condition)
print(output_xml.prettify())
这将打印以下内容:
<root>
<condition>
<comparison compare="and">
<operand idref="Context1" type="boolean">
</operand>
<operand idref="Context2" type="boolean">
</operand>
</comparison>
</condition>
<condition>
<comparison compare="and">
<operand idref="Context5" type="boolean">
</operand>
<operand idref="Context6" type="boolean">
</operand>
</comparison>
</condition>
<condition>
<comparison compare="and">
<operand idref="Context9" type="boolean">
</operand>
<operand idref="Context10" type="boolean">
</operand>
</comparison>
</condition>
</root>
答
使用Beautiful Soup is a Python library拉数据输出HTML和XML文件。它与您最喜爱的解析器一起工作,提供导航,搜索和修改解析树的惯用方式。它通常可以节省程序员数小时或数天的工作时间。
非常感谢! – Bhaskar