В чем разница между.// и //* в XPath?
при поиске относительного XPath через Firebug : он создает как
.//*[@id='Passwd']--------- Что делать, если мы не используем dot в начале, что это означает?просто добавить
//*в Xpath -- он подчеркивает - - - различные элементы страницы---------- что это значит?
Ниже приведены XPaths для полей паролей Gmail. Что такое значение * ?
.//*[@id='Passwd']//child::input[@type='password']
4 ответов
все эти выражения выбирают разные наборы узлов:
.// * [@id= 'Passwd']
The '. в начале означает, что текущая обработка начинается с текущего узла. "*"Выбирает все узлы элементов, нисходящие от этого текущего узла с @id - attribute-значение, равное "Passwd".
что делать, если мы не используем точку в начале, что это означает?
затем вы выберете все узлы элементов с @id - attribute-значение, равное "Passwd" в весь документ.
просто добавьте / / * в XPath - он выделяет - - - различные элементы страницы
это позволит выбрать все узлы элементов весь документ.
ниже упомянуто : XPatht для поля пароля Gmail истинны, что такое значение * ?
.//*[@id='Passwd']
это позволит выбрать все узлы элемента спуск от текущего узла, который @id - attribute-value равно 'Passwd'.
/ / child:: input[@type= 'password']
это будет выбрать все дочерние узлы элемента с именем input, который @type-attribute-значения равны "пароль". The child:: префикс оси может быть опущен, поскольку это поведение по умолчанию.
синтаксис выбора соответствующего выражения объясняется здесь w3school.com.
и объясняются оси (текущая точка в обработке)здесь на другом w3school.com страница.
здесь есть несколько различных ключевых концепций XPath...
абсолютный vs относительный XPaths (/ vs .)
-
/вводит абсолютный путь, начиная с корневого документа. -
.вводит относительный путь, начиная с контекстного узла.
именованный элемент против любого элемента (ename vs *)
-
/enameвыбираетenameкорневой элемент-
./enameвыбирает всеenameдочерние элементы текущего узла.
-
-
/*выбирает корневой элемент, независимо от имени.-
./*или*выбирает все дочерние элементы контекстного узла, независимо от имени.
-
ось потомок-или-собственной личности (//*)
-
//enameвыбирает всеenameэлементы в документе.-
.//enameвыбирает всеenameэлементы В или под узлом контекста.
-
-
//*выбирает все элементы в документе, независимо от имени.-
.//*выбирает все элементы, независимо от имени, в узле контекста или под ним.
-
С этими концепции в виду, вот ответы на ваши конкретные вопросы...
-
.//*[@id='Passwd']значит, чтобы выбрать все элементы На или под текущий контекстный узел, который имеетidзначение атрибута, равное'Passwd'. -
//child::input[@type='password']можно упростить до//input[@type='password']и означает выбрать всеinputэлементы в документе, который имеетtypeзначение атрибута, равное'password'.
точка в XPath называется "контекстное выражение". Если вы поставите точку в начале выражения, это сделает его контекстно-специфичным. Другими словами, он будет искать элемент с id="Passwd" в контексте узла, на котором вы вызываете метод" найти элемент по XPath".
на * на .//*[@id='Passwd'] помогает матча любой элемент С id='Passwd'.
- первый вопрос - все о контексте. Вы можете видеть синтаксис чтобы знать, что '.', '.. и т. д. Значит. Кроме того, я уверен, что вы не найдете лучшего объяснения, чем Этой Ссылке.
- упрощенный ответ на второй вопрос: вы обычно находите узлы, используя HTML-теги, такие как td, a, li, div и т. д. Но ' * ' означает, найти любой тег, который соответствует вашей данной собственности. Это в основном используется, когда вы уверены в данном свойство, но не о том теге, в котором элемент может поставляться, например, предположим, что я хочу, чтобы список всех элементов с идентификатором " xyz " был в любом теге.
надеюсь, что это помогает :)