Я анализирую HTML-документ, и мне нужно имя класса div. Я знаю часть имени класса (которая никогда не меняется), но мне нужно полное имя класса.

Вот код, который я использую:

$doc = new DOMDocument;
$doc->loadHTMLFile('http://some_website.com');
$xpath = new DOMXPath($doc);
$classname_of_the_div=$xpath->query('//div[@class="part_of_the_class_name_that_never_changes"]');

Когда я var_dump() $classname_of_the_div и $classname_of_the_div->item(0), результат будет:

object(DOMNodeList)#3 (1) { ["length"]=> int(0) } 
NULL

Я знаю, что $classname_of_the_div=$xpath->evaluate('string(//div[@class="part_of_the_class_name_that_never_changes"])'); дает мне содержимое div, но как мне получить полное имя класса?

P.S .: Часть имени класса отделяется от остальной части имени класса пробелами, поэтому на самом деле это не часть класса. В div всего несколько классов.

2
user2718671 19 Авг 2014 в 16:45
Говоря, что вы знаете только часть имени класса, вы имеете в виду, что вы знаете только часть значения атрибута class для этого конкретного div?
 – 
Mathias Müller
19 Авг 2014 в 16:48
Я имею в виду, что у div есть несколько имен классов, таких как
- я хочу выбрать его, например, "class2" и получить полную строку класса, включая "class1 class2 class3"
 – 
user2718671
19 Авг 2014 в 16:51

1 ответ

Лучший ответ

Я имею в виду, что у div есть несколько имен классов, например - я хочу выбрать его, например, "class2" и получить полную строку класса, включая "class1 class2 class3"

Затем выражение XPath вроде

//div[@class="part_of_the_class_name_that_never_changes"]

Никогда не даст результата, за исключением ситуации, когда конкретный элемент div имеет только один класс, то есть тот, "который никогда не изменяется". Это потому, что приведенное выше выражение XPath означает:

Выберите элементы div с атрибутом class, строковое значение которого в точности соответствует "part_of_the_class_name_that_ Never_changes".


Но представьте себе следующую ситуацию:

<div class="part_of_the_class_name_that_never_changes other_class1 other_class2"/>

Затем вам нужно будет изменить выражение на:

//div[contains(@class,'part_of_the_class_name_that_never_changes')]/@class

Выражение означает:

Ищите элементы div с атрибутом class, строка которого значение содержит строку "part_of_the_class_name_that_ Never_changes" и вернуть атрибут ценность.

1
Mathias Müller 19 Авг 2014 в 16:55
Действительно, это сработало! Большое тебе спасибо! Использование $ classname_of_the_div = $ xpath-> query ('// div [содержит (@class, "part_of_the_class_name_that_ Never_changes")] / @ class'); и $ classname_of_the_div-> item (0) -> value вернул нужную мне строку
 – 
user2718671
19 Авг 2014 в 17:04