Как мне найти тег в файле xml и найти его дедушку? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть файл XML, который я хочу проанализировать и найти в нем определенные ключевые слова. Файл XML имеет следующий вид:

...
...
<OBJECT data="file://localhost//var/tmp/autoclean/derive/TheGeometry//Descartes-TheGeometry.djvu" height="3143" type="image/x.djvu" usemap="Descartes-TheGeometry_0269.djvu" width="2077">
    <PARAM name="PAGE" value="Descartes-TheGeometry_0269.djvu"/>
    <PARAM name="DPI" value="400"/>
    <HIDDENTEXT>
        <PAGECOLUMN>
            <REGION>
                <PARAGRAPH>
                    <LINE>
                        <WORD coords="653,237,937,202,236">CATALOGUE</WORD>
                        <WORD coords="962,238,1022,205,237">OF</WORD>
                        <WORD coords="1045,240,1208,205,238">DOVER</WORD>
                        <WORD coords="1231,239,1389,205,238">BOOKS</WORD>
                    </LINE>
                    ...
                </PARAGRAPH>
                ...
                ...
    <HIDDENTEXT>
</OBJECT>
...
...

Теперь я sh смогу найти ключевое слово в теге <WORD> и проверить атрибут значения первого тега <PARAM>, соответствующий непосредственному родитель <OBJECT>. Например, допустим, я искал ключевое слово BOOKS, а затем хочу получить значение из этого тега <PARAM name="PAGE" value="Descartes-TheGeometry_0269.djvu"/>

1 Ответ

0 голосов
/ 24 апреля 2020

Попробуйте что-то вроде этого:

import lxml.html as lh
books = """[your code]"""
doc = lh.fromstring(books)
vals = doc.xpath('//object/param[following-sibling::hiddentext//word="books"][1]/@value')
for val in vals:
    print(val)

Вывод:

descartes-thegeometry_0269.djvu
...