Класс родительского узла XPath не должен содержать конкретную строку

Я согласен с ответом от zacherates.

Но вы можете сделать вызов intern () в ваших нелиберальных строках.

Из примера zacherates:

// ... but they are not the same object
new String("test") == "test" ==> false 

Если вы ставите нелитеральное равенство строки, это правда

new String("test").intern() == "test" ==> true 
1
задан jonah_w 17 January 2019 в 11:44
поделиться

2 ответа

вы можете использовать что-то вроде "//div[@class!='extras']/div[@class='phrase']", он должен найти все div с классом 'фраза', где родительский класс не является 'дополнением'

0
ответ дан Robert 17 January 2019 в 11:44
поделиться

Возможно, проблема в вашем текущем инструменте, поскольку он может не поддерживать некоторый синтаксис XPath.

Вы можете попробовать lxml.html для анализа того же HTML-документа:

from lxml import html

source = """<div class="phrases">
                <div class="label">Phrases</div>
                <div class="phrase">this</div>
            </div>

            <div class="phrasal verbs">
                <div class="label">Phrases</div>
                <div class="phrase">this</div>
            </div>

            <div class="extras">
                <h2>test test</h2>
                <div class="phrase">not this</div>
            </div>"""

dom = html.fromstring(source)
dom.xpath(".//div[@class='phrase' and ./parent::div[@class!='extras']]")

Вывод:

[<Element div at 0x7fb5218d5db8>, <Element div at 0x7fb521018728>] #  Two elements found

или

dom.xpath(".//div[@class='phrase' and ./parent::div[@class!='extras']]/text()")

Вывод:

['this', 'this']
0
ответ дан Andersson 17 January 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: