如何使用Python从XML中删除元素

我陷入了XML和Python的困境。任务很简单,但到目前为止我还无法解决,花了那么长时间。我是来这里咨询如何用几行解决它的。

感谢您对遍历树的任何帮助。我总是以太多或太少的元素结束。元素可以无限制地嵌套。给出的例子只是一个例子。我会接受任何解决方案,而不是对dom,minidom,sax等等不挑剔。

我有一个与此类似的XML文件:

<root>

<elm>

<elm>Common content</elm>

<elm xmlns="http://example.org/ns">

<elm lang="en">Content EN</elm>

<elm lang="cs">žluťoučký koníček</elm>

</elm>

<elm xml:id="abc123">Common content</elm>

<elm lang="en">Content EN</elm>

<elm lang="cs">Content CS</elm>

<elm lang="en">

<elm>Content EN</elm>

<elm>Content EN</elm>

</elm>

<elm lang="cs">

<elm>Content CS</elm>

<elm>Content CS</elm>

</elm>

</elm>

</root>

我需要的是-解析XML并编写一个新文件。新文件应包含给定语言的所有元素和没有lang属性的元素。

对于“ cs”语言,输出文件应包含以下内容:

<root>

<elm>

<elm>Common content</elm>

<elm xmlns="http://example.org/ns">

<elm lang="cs">žluťoučký koníček</elm>

</elm>

<elm xml:id="abc123">Common content</elm>

<elm lang="cs">Content CS</elm>

<elm lang="cs">

<elm>Content CS</elm>

<elm>Content CS</elm>

</elm>

</elm>

</root>

如果可以忽略lang新文件中的属性,那就更好了。但这并不重要。

添加了unicode字符和名称空间属性。

使用Python 2.5,首选标准库。

回答:

使用lxml:

import lxml.etree as le

with open('doc.xml','r') as f:

doc=le.parse(f)

for elem in doc.xpath('//*[attribute::lang]'):

if elem.attrib['lang']=='en':

elem.attrib.pop('lang')

else:

parent=elem.getparent()

parent.remove(elem)

print(le.tostring(doc))

产量

<root>

<elm>Common content</elm>

<elm>

<elm>Content EN</elm>

</elm>

<elm>Common content</elm>

<elm>Content EN</elm>

<elm>

<elm>Content EN</elm>

<elm>Content EN</elm>

</elm>

</root>

以上是 如何使用Python从XML中删除元素 的全部内容, 来源链接: utcz.com/qa/412543.html

回到顶部