对于以下 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)
的数组?这不是我没有尝试任何东西或我想要一个已经完成的代码,我只需要知道一些指导来做它并自己理解它。谢谢:))
答案 0 :(得分:1)
你对PHP DOM意味着什么?你的意思是PHP和JQuery?你可以设置
$("#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
)
答案 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');
}
}