现在我正试图在Python3.6中使用lxml。我想删除包含对冲的“程序”,如果没有一个程序包含“keep”,则完全删除“Request”。 xml的结构如下所示:
<Requests>
<Request>
<ProgramSelection>
<Program> <![CDATA[hedge]]> </Program>
<Program> <![CDATA[keep]] </Program>
</ProgramSelection>
</Request>
</Requests>
import lxml.etree
file_name = r'C:filename.xml'
parser = lxml.etree.XMLParser(strip_cdata=False)
tree = lxml.etree.parse(file_name, parser)
root = tree.getroot()
for elem in tree.xpath("./Request[ProgramSelection/Program='hedge']"):
root.remove(elem)
你很接近。以下两个XPath选择与删除条件匹配的元素
您可以将它们组合成可读性稍差的“或”
因为使用^ {< CD1>}模块,请考虑XSLT,专门用于转换XML文件的语言。使用这种方法,不需要
for
循环或if
逻辑。另外,XSLT是可移植的,因此可以在Python之外运行它下面的脚本运行Identity Transform以原样复制文档,然后在所需逻辑上运行两个空模板以删除其内容
XSLT(另存为.xsl文件)
Python
输出
Online Demo
相关问题 更多 >
编程相关推荐