小编Tho*_*hor的帖子

在lxml中,如何删除标记但保留所有内容?

问题是这样的:我有一个像这样的XML片段:

<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>
Run Code Online (Sandbox Code Playgroud)

对于结果,我想删除所有<a>- 和 - <c>标签,但保留它们的(文本)内容和子节点就像它们一样.此外,<b>-Element应保持不变.结果应该是这样的

<fragment>text1 inner<d>1</d> text2 <b>inner2</b> text3</fragment>
Run Code Online (Sandbox Code Playgroud)

暂时,我将恢复一个非常肮脏的技巧:我将etree.tostring片段,通过正则表达式删除有问题的标签,并用etree.fromstring结果替换原始片段(不是真正的代码,但应该是这样的):

from lxml import etree
fragment = etree.fromstring("<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>")
fstring = etree.tostring(fragment)
fstring = fstring.replace("<a>","")
fstring = fstring.replace("</a>","")
fstring = fstring.replace("<c>","")
fstring = fstring.replace("</c>","")
fragment = etree.fromstring(fstring)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用xslt实现这一点,我知道lxml可以使用xslt,但是必须有更多的lxml本机方法吗?

供参考:我已经尝试过使用lxml的element.replace,但由于我想在之前有一个元素节点的地方插入文本,我不认为我能做到这一点.

python xml lxml

20
推荐指数
1
解决办法
1万
查看次数

标签 统计

lxml ×1

python ×1

xml ×1