PHP DOMXpath - получить значение из выбранного класса HTML, когда семь классов имеют одинаковое имя [дубликат]

Вы забыли отправить пустую строку после строки запроса:

s.sendall("GET / HTTP/1.1\r\n\r\n")

Кроме того, HTTP 1.1 указывает, что вы должны добавить поле заголовка Host, как описано в разделе Host в HTTP 1.1 RFC .

s.sendall("GET / HTTP/1.1\r\nHost: www.cnn.com\r\n\r\n")

90
задан Dimitre Novatchev 24 October 2010 в 16:43
поделиться

2 ответа

Это FAQ:

//somexpression[$N]

означает «Найти каждый узел, выбранный //somexpression, который является $N -й дочерью его родителя».

Вы хотите:

(//input[@id="search_query"])[2]

Помните: оператор [] имеет более высокий приоритет (приоритет), чем аббревиатура //.

161
ответ дан Dimitre Novatchev 19 August 2018 в 07:45
поделиться
  • 1
    Мне нравится этот ответ. Я не рассматривал вопрос о приоритете (я просто предполагал простой приоритет слева направо). – rlandster 24 October 2010 в 17:30
  • 2
    @rlandster: слово & quot; приоритет & quot; может быть запутанным. Недопустимая форма //input[@id='search_query'][2]: /descendat-or-self::node()/child::input[attribute::id='search_query'][position()=2] – user 24 October 2010 в 21:35

Это похоже на работу:

/descendant::input[@id="search_query"][2]

Я использую это из «XSLT 2.0 и XPath 2.0 Programmer's Reference, 4th Edition» Майкла Кей.

Также имеется примечание в разделе «Сокращенный синтаксис» спецификации языка XML-маршрута http://www.w3.org/TR/xpath/#path-abbrev который дал ключ.

11
ответ дан rlandster 19 August 2018 в 07:45
поделиться
  • 1
    Большое спасибо за этот ответ. В моем случае принятое решение не будет работать, поскольку я использую xpath в структуре робота, который не принимает пути, начинающиеся с скобок. Этот, однако, должен сделать трюк – dahui 23 September 2015 в 10:40
Другие вопросы по тегам:

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