如何使用xpath查询获取完整的类名?

时间:2014-08-19 12:45:04

标签: xpath web-scraping html-parsing domdocument classname

我正在解析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只有几个类。

1 个答案:

答案 0 :(得分: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个元素   value 包含字符串   “part_of_the_class_name_that_never_changes”并返回该属性   值。