премахване на вградени тагове с lxml на python

Трябва да се справя с два вида вградени тагове в xml документи. Първият тип етикети обхващат текст, който искам да запазя между тях. Мога да се справя с това с lxml

etree.tostring(element, method="text", encoding='utf-8')

Вторият тип тагове включва текст, който не искам да запазя. Как мога да се отърва от тези етикети и техния текст? Бих предпочел да не използвам регулярни изрази, ако е възможно.

Благодаря


person Panos    schedule 25.06.2011    source източник


Отговори (1)


Мисля, че strip_tags и strip_elements са това, което искате във всеки случай. Например този скрипт:

from lxml import etree

text = "<x>hello, <z>keep me</z> and <y>ignore me</y>, and here's some <y>more</y> text</x>"

tree = etree.fromstring(text)

print etree.tostring(tree, pretty_print=True)

# Remove the <z> tags, but keep their contents:
etree.strip_tags(tree, 'z')

print '-' * 72
print etree.tostring(tree, pretty_print=True)

# Remove all the <y> tags including their contents:
etree.strip_elements(tree, 'y', with_tail=False)

print '-' * 72
print etree.tostring(tree, pretty_print=True)

... произвежда следния резултат:

<x>hello, <z>keep me</z> and <y>ignore me</y>, and
here's some <y>more</y> text</x>

------------------------------------------------------------------------
<x>hello, keep me and <y>ignore me</y>, and
here's some <y>more</y> text</x>

------------------------------------------------------------------------
<x>hello, keep me and , and
here's some  text</x>
person Mark Longair    schedule 25.06.2011
comment
Благодаря ви много, точно това исках. - person Panos; 26.06.2011
comment
@Mark Longair: Има ли начин да се използва strip_tags() за премахване на всички дъщерни тагове (и обединяване на текста в дъщерните към родителя)? - person Aufwind; 07.07.2011