我看到了这个提示PHP DOM从第一个ul元素获取项
但是在这种情况下:
<li>First item
<ul>
<li>
First SubItem
</li>
<li>
Second SubItem
</li>
</ul>
</li>
PHP代码:$DOM = new DOMDocument;
libxml_use_internal_errors(true);
$DOM->loadHTML( $output);
$items = $DOM->getElementsByTagName('ul');
echo '<ul>';
foreach ($items->item(3)->getElementsByTagName('li') as $li) {
var_dump($li);die();
echo '<li>'.$li->nodeValue;
$ul = $li->getElementsByTagName('ul');
echo '<ul>';
echo '--->'.$ul->length.'<br>';
for($u=0;$u<$ul->length;$u++){
foreach ($ul->item($u)->getElementsByTagName('li') as $lii) {
echo '<li>'.$lii->nodeValue.'</li>';
}
}
echo '</ul>';
echo '</li>';
}
echo '</ul>';
问题是:我得到//$li->nodeValue;//"First itemFirst SubItemSecond SubItem"作为第一个节点;我需要把这些条目分开(subItems)
我假设您只是想从这些<li>
标记检索文本值。
您可以使用DOMXPath极大地简化查询,因为->query('//li')
将获取代码片段中的所有 <li>
标记。
$DOM = new DOMDocument();
$DOM->loadHTML($output);
$xPath = new DOMXPath($DOM);
if($xpResponse = $xPath->query('//li/text()')) {
echo "<ul>'n";
foreach($xpResponse as $xNode) {
echo "<li>" . trim($xNode->nodeValue) . "</li>'n";
}
echo "</ul>'n";
}
这将简单地输出(作为HTML):
- 第一项
- 第一子项
- 第二子项