Почему не делает работы xpath при обработке документа XHTML с lxml (в Python)?

Это то, что я делаю для проверки на ошибки.

if(isset($responseKeys["error-codes"])){
     //has errors
}
else{
     //no errors
}

Также правильной переменной является g-recaptcha-response , а не gRecaptchaResponse .

21
задан sblundy 17 November 2008 в 22:54
поделиться

2 ответа

Проблемой являются пространства имен. Когда проанализировано как XML, тег img находится в http://www.w3.org/1999/xhtml пространство имен, так как это - пространство имен по умолчанию для элемента. Вы просите тег img ни в каком пространстве имен.

Попытка это:

>>> tree.getroot().xpath(
...     "//xhtml:img", 
...     namespaces={'xhtml':'http://www.w3.org/1999/xhtml'}
...     )
[<Element {http://www.w3.org/1999/xhtml}img at 11a29e0>]
27
ответ дан 29 November 2019 в 20:55
поделиться

XPath полагает, что все неснабженные префиксом имена не находятся в "никаком пространстве имен" .

В особенности спецификация говорит:

"QName в тесте узла расширен на расширенное имя с помощью объявлений пространства имен от контекста выражения. Это - тот же способ, которым расширение сделано для имен типов элемента в запуске и конечных тэгах за исключением того, что пространство имен по умолчанию, объявленное с xmlns, не используется: если QName не имеет префикса, то URI пространства имен является пустым (это - тот же способ, которым названия атрибута расширены)".

Посмотрите те два подробных объяснения проблемы и ее решения: здесь и здесь . Решение состоит в том, чтобы связать префикс (с API, это используется) и использовать его для добавления префикса любого неснабженного префиксом имени в выражении XPath.

Hope это помогло.

С наилучшими пожеланиями,

Dimitre Novatchev

7
ответ дан 29 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

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