php DOMDocument - 将子元素列出到数组

时间:2014-12-02 16:43:02

标签: php

对于以下 HTML

<html>
<body>
<div whatever></div>
<div id="archive-wrapper">
<ul class="archive-list">
    <li><div><a href="#1">A</a></div></li>
    <li><div><a href="#2">B</a></div></li>
    <li><div><a href="#3">C</a></div></li>
</ul>
</div>
</body>

如何以最有效的方式检索使用PHP DOMDocument http://php.net/manual/es/class.domdocument.php),一个包含(#1,#2,#3)的数组?这不是我没有尝试任何东西或我想要一个已经完成的代码,我只需要知道一些指导来做它并自己理解它。谢谢:))

3 个答案:

答案 0 :(得分:1)

你对PHP DOM意味着什么?你的意思是PHP和JQuery?你可以设置

  • 您可以将所有内容放在表单中并将其发布到脚本
  • 你也可以包裹一个只存储所选内容的选择 数据
  • 更好的想法是将jquery发布到数组上 相同的页面,并使用PHP作为服务器端的处理器 munipilation?从长远来看,这是更好的,是最新的方式 与html和服务器端脚本交互。
例如,您可以尝试以下两种方式:

$("#form").submit(function(){ //form being the #form id
    var items = [];
    $("#archive-list li").each(function(n){
        items[n] = $(this).html();
    });

   $.post(
      "munipilate-data.php", 
      {items: items}, 
      function(data){
          $("#result").html(data);
      });
});

答案 1 :(得分:1)

我建议你用正则表达式来解析它。

$html = '<html>
    <body>
       <div whatever></div>
       <div id="archive-wrapper">
       <ul class="archive-list">
            <li><div><a href="#1">A</a></div></li>
            <li><div><a href="#2">B</a></div></li>
            <li><div><a href="#3">C</a></div></li>
       </ul>
       </div>
    </body>';
$reg = '/a href=["\']?([^"\' ]*)["\' ]/';
preg_match_all($reg, $html, $m);
$arr = array_map(function($v){
    return trim(str_replace('a href=', '', $v), '"');
}, $m[0]);

print '<pre>';
print_r($arr);
print '</pre>';

<强>输出:

Array
(
    [0] => #1
    [1] => #2
    [2] => #3
)

Regex Demo

答案 2 :(得分:1)

使用php DOMDocument的简单示例 -

<?php
$html = <<<HTML
<html>
<body>
<div whatever></div>
<div id="archive-wrapper">
<ul class="archive-list">
    <li><div><a href="#1">A</a></div></li>
    <li><div><a href="#2">B</a></div></li>
    <li><div><a href="#3">C</a></div></li>
</ul>
</div>
</body>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);

//get all links
$links = $dom->getElementsByTagName('a');
$linkArray = array();

//loop through each link
foreach ($links as $link){
    $linkArray[] = $link->getAttribute('href');
}

修改
要获取ul - &gt; li中的链接,您可以执行类似的操作 -

$dom = new DOMDocument();
$dom->loadHTML($html);

$linkArray = array();

foreach ($dom->getElementsByTagName('ul') as $li){
    foreach ($li->getElementsByTagName('li') as $a){
        foreach ($a->getElementsByTagName('a') as $link){
            $linkArray[] = $link->getAttribute('href');
        }
    }
}

或者如果你只想要第一个ul,你可以简化为

//get 1st ul using ->item(0)
$ul = $dom->getElementsByTagName('ul')->item(0);
foreach ($ul->getElementsByTagName('li') as $li){
    foreach ($li->getElementsByTagName('a') as $a){
        $linkArray[] = $a->getAttribute('href');
    }
}