xpath используя firexpath - PullRequest
       1

xpath используя firexpath

1 голос
/ 13 марта 2011

У меня есть firexpath, и он не работает с xpath. Даже что-то простое //div не дает результатов. Даже если я щелкну на существующем узле, скажем «скопировать XPath», а затем вставлю этот XPath в поле ввода фильтра, он скажет «узлы не найдены». //*[name()='div'] работает, хотя. Я пропускаю пространство имен или что-то? Вот как выглядит корневой тег (это действительный XHTML):

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" class="ff ff3">

Я не нашел форум поддержки FireXPath, поэтому выкладываю его здесь.

Ответы [ 2 ]

0 голосов
/ 13 марта 2011

Если вы не можете зарегистрировать пространство имен (для пространства имен по умолчанию), а затем добавить префикс каждого имени элемента в выражении XPath к зарегистрированному префиксу, то вы можете использовать выражение XPath, например:

 /*[name()='x']/*[name()='y']/*[name()='z']

В случае если элементы принадлежат другим пространствам имен (кроме пространства имен по умолчанию), вам придется использовать более конкретное выражение XPath:

 /*[name()='x' and namespace-uri()='http://www.w3.org/1999/xhtml']
      /*[name()='y' and namespace-uri()='http://www.w3.org/1999/xhtml']
          /*[name()='z' and namespace-uri()='http://www.w3.org/1999/xhtml']

Если бы вы могли зарегистрировать пространство имен по умолчанию и префикс был (скажем) «p», то вышеприведенное было бы эквивалентно более простому выражению:

/p:x/p:y/p:z
0 голосов
/ 13 марта 2011

Я не использовал firexpath, но похоже, что пространство имен по умолчанию xmlns="http://www.w3.org/1999/xhtml" не позволяет xpath найти div как элемент div внутри элемента, который игнорирует xmlns с префиксом этого пространства имен.

Youследовательно, необходимо зарегистрировать пространство имен с помощью firexpath с помощью какого-либо вызова метода ???тогда //div должно работать, или с вашим выражением тоже все в порядке, если вы хотите рассмотреть пространства имен в выражении, вы можете включить проверку пространства имен, например, так:

//*[name()='div' and namespace-uri()='http://www.w3.org/1999/xhtml']

РЕДАКТИРОВАТЬ:

Я скачал firexpath, который теперь называется firepath, и невозможно зарегистрировать пространство имен, поэтому похоже, что вам придется использовать метод name ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...