【问题标题】:Get content into array using DOM XPath使用 DOM XPath 将内容放入数组
【发布时间】:2020-09-07 16:33:32
【问题描述】:

我正在尝试将标题、信息和时间放入数组中。但是,我一直在获取数据。正如您在我的控制器中看到的,我使用 getelementbyID 来调用我的第一个列表,但它向我显示了 DOMElement 对象。任何人都可以帮忙吗? :/

HTML:

<div class="col-sm-7 tracking">
    <div class="box">
       <ul id="first-list"> 
        <li>
           <span></span>
                 <div class="title">BKI</div>
                 <div class="info">SHIPMENT DELIVERED</div>
                        <div class="time">
                            <span>01/May/2020</span>
                            <span style="color:grey">9:05PM</span>
                        </div>
        </li>

        <li>
           <span></span>
                  <div class="title">BKI</div>
                  <div class="info">SHIPMENT OUT FOR DELIVERY</div>
                      <div class="time">
                            <span>01/May/2020</span>
                            <span style="color:grey">8:56PM</span>
                        </div>
        </li>
    </ul>
 </div>

控制器:

$DOM = new DOMDocument;
    libxml_use_internal_errors(true);
    $DOM->loadHTML($response);

    $xpath = new DOMXPath($DOM);
    $tbody = $DOM->getElementsByTagName('col-sm-7 tracking');

    $query = '//li';

    $entries = $xpath->query($query);

    foreach ($entries as $entry) {
        echo $entry->nodeValue . "<br>";
    }

尝试构建一个数组,如:

[0] => Array
        (
            [Title] => Text 1
            [Info] => Text 1
            [Time] => Text 1
        )

    [1] => Array
        (
            [Title] => Text 2
            [Info] => Text 2
            [Time] => Text 2
        )

【问题讨论】:

    标签: php dom xpath domdocument php-curl


    【解决方案1】:

    这使用 XPath 查找每个 &lt;li&gt; 标记下的相关部分,以提取各种信息。要记住的是使用&lt;li&gt; 作为后续表达式的起点(将其作为第二个参数传递给 XPath 调用)。

    在某些呼叫中,您只需要我使用的文本 evaluate(),因此它节省了获取文本的额外步骤...

    foreach ($entries as $entry) {
        $title = $entries = $xpath->evaluate('string(div[@class="title"])', $entry);
        $info = $entries = $xpath->evaluate('string(div[@class="info"])', $entry);
        $timeParts = $entries = $xpath->query('div[@class="time"]/span', $entry);
        $time = [];
        foreach ( $timeParts as $part ) {
            $time[] = $part->textContent;
        }
        $output[] = [ "title" => $title, "info" => $info, 
            "time" => implode(" ", $time) ];
    }
    

    【讨论】:

    • 非常感谢您的帮助!!尤其是在 class="time" T_T
    猜你喜欢
    • 2011-10-19
    • 2023-03-16
    • 2017-12-13
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多