相关疑难解决方法(0)

如何用lxml中的文本替换元素?

使用lxml的ElementTree API实现从XML文档中完全删除给定元素很容易,但是我看不到用一些文本一致地替换元素的简单方法.例如,给出以下输入:

input = '''<everything>
<m>Some text before <r/></m>
<m><r/> and some text after.</m>
<m><r/></m>
<m>Text before <r/> and after</m>
<m><b/> Text after a sibling <r/> Text before a sibling<b/></m>
</everything>
'''
Run Code Online (Sandbox Code Playgroud)

...你可以轻松删除每个<r>元素:

from lxml import etree
f = etree.fromstring(data)
for r in f.xpath('//r'):
    r.getparent().remove(r)
print etree.tostring(f, pretty_print=True)
Run Code Online (Sandbox Code Playgroud)

但是,你将如何用文本替换每个元素,以获得输出:

<everything>
<m>Some text before DELETED</m>
<m>DELETED and some text after.</m>
<m>DELETED</m>
<m>Text before DELETED and after</m>
<m><b/>Text after a sibling DELETED Text before a sibling<b/></m>
</everything>
Run Code Online (Sandbox Code Playgroud)

在我看来,这是因为通过与文字ElementTree的API交易.text和 …

python xml lxml elementtree

13
推荐指数
2
解决办法
8318
查看次数

清理xml ==>删除行(如果有空标记)

我想清理我的xml,这样不仅它是有效的XML,而且它以一种非常人类可读的方式进行格式化.例如:

<Items>
    <Name>Hello</Name>
    <Cost>9.99</Cost>
    <Condition/>
</Items>
Run Code Online (Sandbox Code Playgroud)

我想删除任何带有空标记的行,留下:

<Items>
    <Name>Hello</Name>
    <Cost>9.99</Cost>
</Items>
Run Code Online (Sandbox Code Playgroud)

我尝试使用正则表达式进行此操作,但在将其保留为可读格式方面并没有太多运气:

txt = etree.tostring(self.xml_node, pretty_print=True)
txt = re.sub(r'<[a-zA-Z]+/>\n', '', txt)
Run Code Online (Sandbox Code Playgroud)

实现上述目标的最佳方法是什么?

python regex xml

5
推荐指数
1
解决办法
2444
查看次数

标签 统计

python ×2

xml ×2

elementtree ×1

lxml ×1

regex ×1