首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用domxpath解析某个复杂的嵌套html

使用domxpath解析某个复杂的嵌套html
EN

Stack Overflow用户
提问于 2018-04-30 17:04:02
回答 1查看 89关注 0票数 1

我在想如何从一个比我在网上能找到的任何例子都要复杂的html页面中提取出某些文本元素时遇到了问题。

我试图解析的网站是一个房地产网站,在html中,他们有像价格和房产状态这样的东西。如果我们以属性的状态为例,我试图从以下html片段中获取“待售”:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="repeating container of property details">
<div class="firstlevel other class too">
    <div class="secondlevel other class too">
        <div class="thirdlevel">
            <div class="fourthlevel">
                <span class="thisspan">For Sale</span>
                <span class="someotherspan">Something else</span>
            </div>
        </div>
    </div>
</div>

然后使用下面的php,我试着提取我需要的东西。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXpath($doc);

$properties = $xpath->query('//div[@class="repeating container of property details"]');

foreach($properties as $container) {

    $node = $xpath->query('div[@class="firstlevel other class too"]'
        . '/div[@class="secondlevel other class too"]'
        . '/div[@class="thirdlevel"]'
        . '/div[@class="fourthlevel"]'
        . '/span[@class="thisspan"]', $container); // returns a DOMNodeList  
    $result = $node->item(0)->value; // get the first node in the list which is a DOMAttr
    echo 'value: '.$result.'<br/>';
}

但我得到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Undefined property: DOMElement::$value

它显然没有选择我想要获得的东西,而且到目前为止我尝试过的其他东西似乎都不起作用。有谁能给我指个方向吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-06 13:25:45

您要获取的是元素节点( span),而不是属性节点。元素节点没有$value属性。使用$textContent属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$result = $node->item(0)->textContent;

或者将节点列表转换为Xpath表达式中的字符串:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$result = $xpath->evaluate('string(div[@class="firstlevel other class too"]'
    . '/div[@class="secondlevel other class too"]'
    . '/div[@class="thirdlevel"]'
    . '/div[@class="fourthlevel"]'
    . '/span[@class="thisspan"])', $container); // returns a DOMNodeList  
echo 'value: '.$result.'<br/>';

这只适用于DOMXpath::evaluate()DOMXpath::query()只支持返回节点列表的表达式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50105052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文