【发布时间】:2011-06-08 13:18:45
【问题描述】:
问题是这样的:我有一个这样的 XML 片段:
<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>
对于结果,我想删除所有<a>- 和<c>-Tag,但保留它们的(文本)内容和子节点原样。此外,<b>-Element 应该保持不变。结果应该是这样的
<fragment>text1 inner<d>1</d> text2 <b>inner2</b> text3</fragment>
暂时,我将恢复一个非常肮脏的技巧:我将 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)
我知道我大概可以使用 xslt 来实现这一点,并且我知道 lxml 可以利用 xslt,但是必须有更多 lxml 原生的方法吗?
供参考:我尝试使用 lxml 的 element.replace 到达那里,但由于我想在之前有元素节点的地方插入文本,我认为我不能这样做。
【问题讨论】: