Относительный xpath не работает [дубликат]

JavaScript использует значения двойной точности с плавающей запятой, то есть полную точность 53 бит, но вам нужно

ceil(lb 714341252076979033) = 60

битов, чтобы точно представить это значение.

Ближайшая точно представимая число 714341252076979072 (записать исходный номер в двоичном формате, заменить последние 7 цифр на 0 и округлить, потому что наивысшая замещенная цифра была 1).

Вы получите 714341252076979100 вместо этого числа, поскольку ToString(), как описано ECMA-262, §9.8.1 работает с полномочиями в десять и по 53-битной точности, все эти числа равны.

10
задан kjhughes 24 February 2016 в 18:18
поделиться

4 ответа

Эти выражения все выбирают разные узлы:

.//* [@ id = 'Passwd']

The. в начале означает, что текущая обработка начинается с текущего узла . «*» Выбирает все узлы узлов, спускающиеся с этого текущего узла, с @id -значением-значением, равным «Passwd».

Что делать, если мы не используем точку в начале, что она обозначает?

Затем вы выберете все узлы элементов с помощью @id - значение атрибута равно «Passwd» в документе whole .

Просто добавьте // * в XPath - это выделяет --- различные элементы страницы

Это выберет все узлы элемента в документе whole .

Ниже упомянуто: Поле XPatht для Gmail Password истинно, что имеет значение of *?

.//*[@id='Passwd']

Это позволит выбрать все узлы узлов, спускающиеся с текущего узла, значение @id -attribute равно «Passwd».

// child :: input [@ type = 'password']

Это выберет все дочерние элементы с именем input, которые @type -трибуты-значения равны на «пароль». Префикс оси child:: может быть опущен, поскольку это поведение по умолчанию.

Синтаксис выбора соответствующего выражения объясняется здесь здесь, на w3school.com .

И оси (текущая точка в обработке) объясняются здесь на другой странице w3school.com .

13
ответ дан zx485 18 August 2018 в 08:50
поделиться
  • 1
    Если у вас есть сомнения, пожалуйста, ознакомьтесь с хорошим ответом @ kjhughes ниже. – Mathias Müller 24 February 2016 в 19:08
  • 2
    @ Mathias Müller: Я исправил недостатки своего ответа. – zx485 24 February 2016 в 19:36
  • 3
    Намного лучше, спасибо за редактирование. Обратите внимание, что информация из w3schools.com часто неточна, например, путаница между «узлами» и "узлы элементов" может возникнуть из-за этой неправильной веб-страницы. – Mathias Müller 24 February 2016 в 20:49
  • 4
    Спасибо, что указали, что «ребенок ::» фактически является дефолтом. – Borna 14 December 2016 в 10:49

Точка в XPath называется «выражение контекстного элемента» . Если вы положите точку в начале выражения, это сделает ее контекстной. Другими словами, он будет искать элемент с id="Passwd" в контексте узла, на который вы вызываете метод «find element by XPath».

* в .//*[@id='Passwd'] помогает для соответствия любого элемента с id='Passwd'.

2
ответ дан alecxe 18 August 2018 в 08:50
поделиться

Здесь есть несколько различных ключевых понятий XPath ...

Абсолютный и относительный XPaths (/ vs .)

  • / вводит абсолютный путь местоположения, начиная с корня документа.
  • . вводит относительный путь местоположения, начиная с контекстного узла.

Именованный элемент 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'.
22
ответ дан kjhughes 18 August 2018 в 08:50
поделиться
  1. Для первого вопроса : Все дело в контексте. Вы можете видеть Синтаксис , чтобы узнать, что означает «.», «..» и т. Д. Кроме того, я уверен, вы не найдете никакого объяснения лучше, чем Эта ссылка .
  2. Упрощенный ответ для второго вопроса : вы обычно найдете узлы, используя html-теги, такие как td, a, li, div и т. д. Но «*» означает, что найдите любой тег, соответствующий вашему заданному свойству. Это чаще всего используется, когда вы уверены в заданном свойстве, но не о том теге, в котором может возникнуть элемент, например, я хочу, чтобы список всех элементов с идентификатором «xyz» был в любом теге.

Надеюсь, что это поможет:)

1
ответ дан Prateek 18 August 2018 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: