Я пытаюсь выбрать все узлы с
атрибут, равный чему-то, я получил
ошибка в заголовке.
Моя строка Xpath выглядит
//@[id=****]
, кто-нибудь знает, что
неправильно?
Много вопросов с этим выражением:
0,1. //@[some-condition]
Предикат может применяться только к выбранным узлам, но //@
не выбирает ни одного узла. @
- это сокращение от attribute::
, и это незаконченный тест узла. Здесь отсутствует тип узла или имя узла.
Что было бы правильно: //@*[some-condition]
или //@attrName[some-condition]
0,2. id=****
синтаксически недопустим, если ** не является действительным выражением XPath. Я предполагаю, что вы хотите получить все атрибуты со значением, равным некоторому известному, буквальному значению. В любом таком случае используется синтаксис id='someLiteral
- обратите внимание на одинарные кавычки (они также могут быть двойными), окружающие буквальное значение.
Решение
//*[@id='something']
Это выбирает все элементы в документе XML, которые имеют атрибут id
со значением 'something'
.
//@id[. = 'something']
Выбирает все атрибуты с именем id
в документе XML, значение которых 'something'
.
//@*[. = 'something']
Выбирает все атрибуты в документе XML (независимо от их имени), значение которых 'something'
.