在PHP中存储同级元素的属性和内部html
我试图搜索和存储html页面中的值,所以我有一个简单的数组数组。它只有2个数组,每个数组有3个项目。我这样定义它;这些只是标题:在PHP中存储同级元素的属性和内部html,php,html,Php,Html,我试图搜索和存储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</s
$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>
我目前正在使用以下方法。我唯一知道的是日期:
$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值呢?我可以通过它们的相对兄弟位置以某种方式获得它们吗?这里有一个简单的代码,可以获得您所需要的所有信息:
$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,因为它是类型对象。我认为您已经了解了一些东西,它似乎比我以前的方法优雅得多。但现在的情况是,我遇到了PHP致命错误:在null上调用成员函数getElementsByTagName,这听起来好像不存在,但它确实存在。我能想到的唯一一件事是,它被包裹在一堆东西里,这有什么关系吗?
$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);