получить только данные xml из текстового файла, используя python

У меня есть текстовый файл, в котором есть данные XML и данные HTML. Оба начинаются с ‹. Теперь я хочу извлечь только данные XML и сохранить их в другом файле. Как мне это сделать?

Пример файла:

xyz data:
<note>
<to>john</to>
<from>doe</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

xyz data
<bold>xyz</bold>

text 
text 
text

<bold>xyz</bold>

again XML data

Примечание. Этот файл имеет формат .txt.


person DHRUV MAKWANA    schedule 20.10.2020    source источник
comment
Как узнать, какой раздел является XML, а какой HTML? Они используют один и тот же синтаксис тегов.   -  person balderman    schedule 20.10.2020
comment
Нет такой вещи, как текст, смешанный с XML. Либо это XML, либо его можно проанализировать с помощью синтаксического анализатора XML. Или что-то другое, например текст с < и >, разбросанными в разных местах. Вот что у вас есть. Что вы можете попытаться сделать, так это проанализировать это с помощью парсера HTML, а затем посмотреть на полученный DOM.   -  person Tomalak    schedule 20.10.2020


Ответы (1)


Я бы рассматривал весь ваш ввод не как XML, а как фрагмент HTML. HTML может содержать нестандартные элементы, поэтому <note> и т.д.

Для удобства я предлагаю pyquery (ссылка) для работы с HTML. Он работает почти так же, как jQuery, поэтому, если вы работали с ним раньше, он должен быть вам знаком.

Это довольно прямолинейно. Загрузите свои данные, оберните их в "<html></html>", проанализируйте их, запросите.

from pyquery import PyQuery as pq

data = """xyz data:
<note>
<to>john</to>
<from>doe</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

xyz data
<bold>xyz</bold>

text 
text 
text

<bold>xyz</bold>

again XML data"""

doc = pq(f"<html><body>{data}</body></html>")
note = doc.find("note")

print(note.find("body").text())

который печатает "Don't forget me this weekend!".

person Tomalak    schedule 20.10.2020