Разбор XML с Python: сохранение текста в атрибуте при удалении тега вокруг него - PullRequest
1 голос
/ 22 января 2020
Input:
<p>
<milestone n="14" unit="verse" />
 The name of the third river is
<placeName key="tgn,1130850" authname="tgn,1130850">Hiddekel</placeName>: this is the one which flows in front of Assyria. The fourth
river is the <placeName key="tgn,1123842" authname="tgn,1123842">Euphrates</placeName>. 
</p>

Желаемый результат:

<p>
<milestone n="14" unit="verse" />
 The name of the third river is Hiddekel: this is the one which flows in front of Assyria. The fourth river is the Euphrates. 
</p>

Привет, я хотел бы найти способ извлечь текст из подэлемента (placeName) и поместить его обратно в тело большего размера. текста. У меня есть подобные проблемы в другом месте в файле XML, например, для имен людей. Я хотел бы быть в состоянии извлечь имена и места, не избавляясь от вех. Спасибо за помощь!

Текущий код:

for p in chapter.findall('p'):
    i = 1
    for text in p.itertext():
        file.write(body.attrib["n"] + " " + chapter.attrib["n"] + ":" +  str(i) + text)
        i = i + 1

1 Ответ

1 голос
/ 23 января 2020

Это можно сделать с помощью Beautifulsoup и метода unwrap():

from bs4 import BeautifulSoup as bs

snippet = """your html above"""

soup = bs(snippet,'lxml')
pl = soup.find_all('placename')
for p in pl:
    p.unwrap()
soup

Вывод:

<html><body><p>
<milestone n="14" unit="verse"></milestone>
 The name of the third river is
Hiddekel: this is the one which flows in front of Assyria. The fourth
river is the Euphrates. 
</p>
</body></html>
...