В чем разница между
следующие запросы xpath
Дело 1:
//@href
Выбирает все узлы атрибута href
в документе XML.
Случай 2:
//a/@href
Выбирает все атрибуты href
, принадлежащие любому элементу с именем a
, который не находится в пространстве имен.
Дело 3:
*/a/@href
Выбирает все атрибуты href
, принадлежащие любому элементу с именем a
, который не находится в пространстве имен и является внуком текущего (контекстного) узла.
Скорее всего, вы хотели написать :
//*/a/@href
Это выбирает все атрибуты href
, принадлежащие любому элементу с именем a
, который не находится в пространстве имен и чьим родителем является элемент.
В моей ситуации:
//@href
возвращает все данные
содержится в атрибуте href
.
//a/@href
ничего не возвращает, кроме меня
ожидайте, что он вернется так же, как
//@href
*/a/@href
ничего не возвращает, кроме меня
ожидайте, что он вернется так же, как
//@href
и //a/@href
Боюсь, что я ужасно
недопонимание, как эти запросы
Работа. Есть ли кто-нибудь, кто может установить меня
Прямо. Заранее спасибо за
ваша помощь.
Очень часто случается, что документ XML имеет пространство имен по умолчанию. Скорее всего, это причина вашей проблемы . В этом случае в документе не существует элемента a
, который находится в «пространстве имен», и любое выражение XPath, имеющее a
в качестве шага расположения, ничего не выбирает.
Кроме этого, три выражения не эквивалентны .
//@href
и //a/@href
может выбирать различные наборы узлов, если в документе есть другие элементы, кроме a
, которые имеют атрибут href
, или если документ находится в пространстве имен по умолчанию. В последнем случае второе выражение ничего не выбирает.
//a/@href
и //*/a/@href
может выбирать различные наборы узлов, если верхний элемент документа - a
, который имеет атрибут href
. Атрибут href
этого верхнего элемента выбирается первым выражением XPath, но не выбирается вторым, поскольку родительский элемент верхнего элемента не является элементом (это корневой узел /
).