我试图从html页面搜索和存储值,因此我有一个简单的数组数组。它只有2个数组,每个数组长3个。我这样定义它;这些只是标题:
$fileContents = array(
array('Date', 'Title', 'Link')
);
html具有以下结构:
<li class='my-list'>
<div class='my-meta'>
<span class='my-date'>06/08/2018</span>
</div>
<a href='https://www.example.com/'>My Title </a>
这种结构重复了几次。我只需要从顶部开始的第一个(最新的一个)。我可以看到我需要的所有信息或我的数组都在那里。 Date
为06/08/2018
,Title
为My Title
,Link
为www.example.com/
。但我不知道如何访问它们;特别是Title和Link,因为这些元素上没有类。为了进一步澄清,我希望这是最终结果(它是一个csv):
Date, Title, Link
06/08/2018, My Title, https://www.example.com/
目前我正在使用以下方法。我知道如何获得的唯一一个是日期:
$dateClassName="my-date";
$xpath = new DomXpath($doc);
$dateList = $xpath->query("//span[contains(@class, '$dateClassName')]");
$dateNode = $dateList->item(0);
function innerHTML($node) {
return implode(array_map([$node->ownerDocument, "saveHTML"],
iterator_to_array($node->childNodes)));
}
$textArray = array();
array_push($textArray, innerHTML($dateNode));
其余项目(链接和标题)我不确定如何存储,因为元素上没有类。
问题:鉴于我上面的现有方法,如果相关元素没有可供搜索的公开类,我还可以从HTML中存储我需要的值?我可以凭借他们相对的兄弟姐妹的位置以某种方式获得他们吗?
答案 0 :(得分:1)
这是一个简单的代码,可以满足您的所有需求:
$s = "<ul>
<li class='my-list'>
<div class='my-meta'>
<span class='my-date'>06/08/2018</span>
</div>
<a href='https://www.example.com/'>My Title </a>
</li>
<li class='my-list'>
<div class='my-meta'>
<span class='my-date'>06/08/2017</span>
</div>
<a href='https://www.example.com/2'>My Title2 </a>
</li>
</ul>";
$doc = new DOMDocument();
$doc->loadHTML($s);
$xpath = new DomXpath($doc);
$li = $xpath->query("//li");
$li = $li->item(0);
var_dump($li->getElementsByTagName('a')[0]->getAttribute('href'));
var_dump($li->getElementsByTagName('div')[0]->getElementsByTagName('span')[0]->textContent);
var_dump($li->getElementsByTagName('a')[0]->textContent);
如您所见,您可以使用$li
,因为它是DOMElement
类型的对象。