PHP простой вопрос XPath - PullRequest
2 голосов
/ 15 марта 2011

У меня есть этот div:

<div class="product-name">Product1</div>

У меня также есть этот div:

<div class="product-name gold">Product2</div>

Как я могу изменить этот запрос xpath, чтобы получить любые div, которые содержит наименование товара?Вместо точного совпадения.

/html/body//div[@class='product-name']

Я гуглил его, но все, что я мог найти, это как использовать contains при поиске значения внутри узла, а не атрибута.

РЕДАКТИРОВАТЬ enter image description here

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

Классический ответ XPath 1.0 для этого экзистенциального теста последовательности:

/html/body//div[
   contains(
      concat(' ',normalize-space(@class),' '),
      ' product-name '
   )
]
1 голос
/ 15 марта 2011

Вы можете использовать contains():

/html/body//div[contains(@class, 'product-name')]

Обновление:

Как указывает @ Alejandro в своем комментарии, это также будет соответствовать любому классу, который содержит product-name. См. Его ответ для решения XPath 1.0 .

Если вы используете XPath 2.0, вы также можете сделать это:

/html/body//div[exists(index-of(tokenize(@class, "\s+"), "product-name"))]
0 голосов
/ 15 марта 2011

/html/body//div[contains(@class,'product-name')]

Атрибуты также являются узлами, они называются узлами атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...