2015-09-03 1 views
0

Как я могу проанализировать следующее в python, чтобы получить текст между скобками <p>, но без тега или значения <mark>? Предпочтительно использовать функциональность ElementTreeКак разобрать инструкцию xml с тегами внутри текста

<plist> 
<p>Hello there? <mark type="ph"/> How are you?</p> 
</plist> 

Разбор следует возвращать «Привет, там? Как дела?

Спасибо!

+0

Также следует отметить, что XML является частью более крупного блока, поэтому было бы хорошо, если бы было легко истребимо. – JJJ1106

+0

Возможный дубликат [Как разобрать XML в Python?] (Http://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python) – John

+0

@John Я не думаю, что это один является дубликатом. На вопрос может не хватить попыток решить проблему, но, в общем, вопрос ясен и касается конкретного варианта использования. Благодарю. – alecxe

ответ

0

В случае lxml.etree, вы можете использовать string() XPath функцию:

from lxml.etree import fromstring 

data = """ 
<plist> 
<p>Hello there? <mark type="ph"/> How are you?</p> 
</plist> 
""" 

root = fromstring(data) 
for p in root.xpath("//plist/p"): 
    print p.xpath("string()") 

Print:

Hello there? How are you? 
+0

Я считал это, но надеялся ограничить мои зависимости только ElementTree. Есть ли другие альтернативы, о которых вы знаете? – JJJ1106

+0

@ JJJ1106 вы можете решить его с помощью 'xml.etree.ElementTree', но он не был бы столь же кратким и простым, как и с' lxml.etree', поскольку имеется ограниченная поддержка XPath. Почему бы не использовать то, что существует в экосистеме Python, чтобы решить проблему? – alecxe

+0

Хорошая точка, так как я выполнил итерацию до этой точки в моем xml, используя начальный узел и работая по иерархии, может ли эта строка() из функции lxml.etree работать над типом объекта элемента? Или мне нужно сначала превратить его в строку? – JJJ1106

 Смежные вопросы

  • Нет связанных вопросов^_^