PHP - 在找到元素后从元素中获取链接

I have the following code....

<div class="outer">
<div>
<h1>Christmas</h1>
 <ul>
  <li>Holiday</li>
  <li>Fun</li>
  <li>Joy</li>
 </ul>
<h1>4th July</h1>
 <ul>
  <li>Fireworks</li>
  <li>Happy</li>
  <li>Spectral</li>
 </ul>
</div>
</div>
<div class="outer">
<div>
<h1>Christmas2</h1>
 <ul>
  <li>Holiday</li>
  <li>Fun</li>
  <li>Joy</li>
 </ul>
<h1>4th July</h1>
 <ul>
  <li>Fireworks2</li>
  <li>Happy</li>
  <li>Spectral</li>
 </ul>
</div>
</div>

I already know that I can find the DIV and then look inside the DIV for the elements etc by doing...

$doc->loadHTML($output);    //$output being the text above
$xpath = new DOMXpath($doc);
$elements = $xpath->query('//div[@class="outer"]');  //Check outer

I know this above 3 lines will get the elements from within the DIV listed, but what I really want to be able to do is get the text of the [H1], then display the [li] values next to each H1..

the output i'm looking for is...

Christmas - Holiday, Fun, Joy
4th July - Fireworks, Happy, Spectral
Christmas2 - Holiday, Fun, Joy
4th July2 - Fireworks, Happy, Spectral
doubo1711
doubo1711 展示你尝试过的东西......我认为没有努力解决你的问题。你正在做的是寻求答案,而不是帮助。
接近 6 年之前 回复

2个回答

Yes you can continue to use xpath to traverse the elements on the header and get its following sibling, the list. Example:

$doc = new DOMDocument();
$doc->loadHTML($output);
$xpath = new DOMXpath($doc);
$elements = $xpath->query('//div[@class="outer"]/div');
if($elements->length > 0) {
    foreach($elements as $div) {
        foreach ($xpath->query('./h1', $div) as $e) {
            $header = $e->nodeValue;
            $list = array();
            foreach ($xpath->query('./following-sibling::ul/li', $e) as $li) {

                $list[] = $li->nodeValue;
            }

            echo $header . ' - ' . implode(', ', $list) . '<br/>';
        }
        echo '<hr/>';
    }   
}

Sample Output

dongrao9436
dongrao9436 很高兴这有所帮助,无论如何,这里的资源并不缺乏。 美好的一天
接近 6 年之前 回复
dongliling6336
dongliling6336 万分感谢! 好吧,我想尝试自己学习,你知道吗? 但经过一个小时的尝试理解它,我就放弃了,道歉。
接近 6 年之前 回复
douwen5741
douwen5741 你不断改变这个问题,你应该首先完成最后一个问题。 无论如何,检查修改
接近 6 年之前 回复
dqed19166
dqed19166 你100%正确,但我的意思是没有一个关于那个是我的意思...我想如果我得到基础知识我将能够理解和修改你的代码,因为我来自ASP.NET但 显然我没有想象的那么好。 以上是我正在尝试理解如何从中提取数据的结构。 一百万谢谢
接近 6 年之前 回复
dongxi4235
dongxi4235 如果是这样,那么只需修改第一个查询,因为它在$ elements = $ xpath-> query('// div [@ class =“outer”] / div [@ class =“inner”]'中有另一个div );
接近 6 年之前 回复
dqthn68688
dqthn68688 Ghost我不得不改变我的要求因为我认为如果我修改它仍然可以工作,但是有些原因它不起作用你能帮助修改版本吗?
接近 6 年之前 回复

I've used phpQuery for this type of issue in the past:

// include phpquery
require('phpQuery/phpQuery.php');
// initialize
$doc = phpQuery::newDocumentHTML($markup);
// get the text from the various elements
$h1Value = $doc['h1:first']->text(); // Christmas
// ... etc.

(untested)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐