【问题标题】:How to get full classname with xpathquery?如何使用 xpathquery 获取完整的类名?
【发布时间】:2014-10-12 13:47:15
【问题描述】:

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

【问题讨论】:

  • 说你只知道类名的一部分,你的意思是你只知道这个特定divclass属性值的一部分吗?
  • 我的意思是 div 有几个类名,例如
    - 例如,我想通过“class2”选择它并接收包括“class1 class2 class3”在内的完整类字符串"

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


【解决方案1】:

我的意思是 div 有几个类名,例如 - 我想通过“class2”选择它并接收 完整的类字符串,包括“class1 class2 class3”

然后,像这样的 XPath 表达式

//div[@class="part_of_the_class_name_that_never_changes"]

将永远不会产生结果,除非特定的div 元素只有一个类,即“永远不会改变”的类。那是因为上面的 XPath 表达式意味着:

选择具有class 属性的div 元素,其字符串值为 正是对应于“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

表达的意思:

查找具有class 属性的div 元素,其字符串 value 包含字符串 “part_of_the_class_name_that_never_changes”并返回属性 价值。

【讨论】:

  • 确实,这成功了!非常感谢!使用 $classname_of_the_div=$xpath->query('//div[contains(@class, "part_of_the_class_name_that_never_changes")]/@class');并且 $classname_of_the_div->item(0)->value 还给了我需要的字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2013-08-01
相关资源
最近更新 更多