Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中存储同级元素的属性和内部html_Php_Html - Fatal编程技术网

在PHP中存储同级元素的属性和内部html

在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

我试图搜索和存储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>
我目前正在使用以下方法。我唯一知道的是日期:

$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);