Список тегов для удаления. Будут удалены только теги, их содержание будет перенесено в родительский тег.
ема заключается в следующем: у меня есть фрагмент XML, например, так:
<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>
Для результата хочу удалить все<a>
- а также<c>
Тэги, но сохраняют свое (текстовое) содержание и дочерние узлы такими, какие они есть. Так же<b>
-Элемент должен быть оставлен нетронутым. Результат должен выглядеть так
<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?
Для справки: я пытался попасть туда с помощью element.replace в lxml, но, поскольку я хочу вставить текст там, где раньше был элементный элемент, я не думаю, что смогу это сделать.