如何使用HTML标记保存xpath查询数据以保存HTML?

时间:2017-09-08 11:30:50

标签: php dom xpath

我试图了解如何保存查询找到的html字符串,以便我可以访问它的元素。

我使用以下查询查找以下ul列表。

$data = $xpath->query('//h2[contains(.,"Hurricane Data")]/following-sibling::ul/li');

<h2>Hurricane Data</h2>
<ul>
    <li><strong>12 items</strong> found, see <a href="/link">here</a>for more information</li>
    <li><strong>19 items</strong> found, see <a href="/link">here</a>for more information</li>
    <li><strong>13 items</strong> found, see <a href="/link">here</a>for more information</li>
</ul>

如果我print_r($data),我会得到以下DOMNodeList Object ( [length] => 3 ),其中涉及找到的3个元素。

如果我foreach()进入$data,我会收到包含所有3个li数据的DOMElement对象。

我想要完成的是将每个li数据放入可访问的数组中,但我想解析html strong &amp;里面也有一个标签。

现在,我已经做了我想做的所有事情,除了强大的和标签没有被插入数组中,这就是我想出的。

$string = [];
$query = $xpath->query('//h2[contains(.,"Hurricane Data")]/following-sibling::ul/li');
foreach($query as $values){
    $try = new \DOMDocument;
    $try->loadHTML(mb_convert_encoding($values->textContent, 'HTML-ENTITIES', 'UTF-8'));

    $string[] = $try->saveHTML();
}

echo $string[0];
// outputs = 12 items found, see here for more information
// no strong tags, no hyperlinks

1 个答案:

答案 0 :(得分:1)

您不需要重新处理数据,您可以说保存此特定节点......

foreach($query as $values){    
    $string[] = $doc->saveHTML($values);
}

其中$doc是用作XPath查询基础的文档。