2015-09-02 7 views
1

Я новичок в xpath и пытаюсь сформулировать выражение xpath, которое проверит, установлен ли флажок.Как сформулировать выражение xpath, чтобы проверить, установлен ли флажок?

вот мой HTML,

<label><input type='checkbox' name='name[]' class="some-class-name" /> Text 1</label> 
 
<label><input type='checkbox' name='name[]' class="some-class-name" checked /> Text 2</label>

и у меня есть это выражение XPath, но им не получить никакого результата,

 
//*[contains(text()[normalize-space()], " Text 1 ")] //input[@type="checked" and not(@checked)] 

Как проверить, если "Текст 1" флажок проверяется с помощью xpath?

ответ

1

Следующее выражение XPath должны выбрать то, что вы хотите:

//*[@type="checkbox" and not(@checked)][contains(normalize-space(following-sibling::text()[position()="1"]), "Text 1")] 

Это возвращает этот элемент:

<input type="checkbox" id="id" name="name[]" /> 

Примечания:

  • following-sibling::text()[position()='1'] часть является наиболее важной частью здесь ; это означает, первый следующий родственный брат, который является текстовым узлом .
  • Используйте форму contains(normalize-space(…), "Text 1"), чтобы проверить значение текстового узла. Обратите внимание, особенно "Text 1" - вы не хотите использовать форму contains(normalize-space(…), " Text 1 "), которая была у вас в оригинале, потому что она не удалась из-за пробелов в " Text 1 ". Когда вы используете normalize-space(…), вы просите удалить те ведущие + трейлинг-пространства из текстового узла. Таким образом, вам нужно проверить соответствие с тем, что будет выглядеть текстовым узлом при удалении этих пробелов, которое равно "Text 1".
+0

Благодарим за отзыв. он отлично работает для этих 2 флажков. Я пытался добавить больше тех линии, как и получить 5-й флажок, но я не получаю никакого результата. вот настройка, которую я сделал с xpath, которую вы сделали // * [@ type = "checkbox" а не (@checked)] [содержит (normalize-space (following-sibling :: text() [position() = " 3 "])," Текст 3 ")] Я делаю это правильно? – John

+0

@JohnDiegor Очень сложно читать код, вставляемый в комментарии здесь. Я предлагаю вам опубликовать новый вопрос в качестве ответа на этот вопрос, а затем разместить ссылку на него здесь. Это даст вам больше видимости для вопроса, а другие в StackOverflow смогут увидеть и ответить. Но я тоже буду, если у меня будет время, а кто-то еще не дал вам хороший ответ после того, как вы его разместили, и к тому времени, когда я это увижу. – sideshowbarker

+0

Да, я заметил, что его немного сложно прочитать коды HTML, которые я разместил здесь. но я думаю, что я уже понял это @sideshowbarker :-) – John