Выберите узел XML по имени атрибута, игнорируя пространство имен этого атрибута - PullRequest
7 голосов
/ 23 мая 2011

У меня есть такой узел:

<meta name="og:description" content="Here's the content" />

Я хочу иметь возможность выбрать этот элемент, если имя «описание», находится ли оно в пространстве имен или нет. Мне нужно иметь возможность выбрать метатег, если его имя «og: description», «description», «blah: description» и т. Д.

Я видел ресурсы для xpath, которые показывают, как выбирать в пространстве имен, но не независимо от пространства имен.

Ответы [ 2 ]

13 голосов
/ 23 мая 2011

Использовать :

//meta[@*[local-name() = 'description']]

Выбирает все meta элементы в документе XML, которые имеют атрибут с локальным именем "description".

ByПо определению, стандартная функция XPath local-name() создает имя узла, с которого префикс пространства имен (если есть) удаляется.

Doпримечание : всегда избегайте использования псевдооператора //, если структура документа XML статически известна.Часто использование // вызывает медленное выполнение.

5 голосов
/ 23 мая 2011

Используя XPath 2, вы можете сделать:

 /meta[ends-with(@name, 'description')]

Для XPath 1 нам понадобится:

 /meta['description' = substring(@name, string-length(@name) - string-length('description') + 1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...