在一个典型的HTML中,
<ol>
<li>
<span>parent</span>
<ul>
<li><span>nested 1</span></li>
<li><span>nested 2</span></li>
</ul>
</li>
</ol>
我尝试获取<li>
元素的内容,但需要分别获取parent
和嵌套在ul
下的内容。
如果像这样走
$ols = $doc->getElementsByTagName('ol');
foreach($ols as $ol){
$lis = $ol->getElementsByTagName('li');
// here I need li immediately under <ol>
}
$lis
是所有的li
元素,包括父元素和嵌套元素。
如何通过忽略更深层次来获取ol
下的一个层次的li
元素?
发布于 2019-06-11 03:20:06
有两种方法可以做到这一点,第一种是如何使用getElementsByTagName()
,其想法是挑选出第一个<li>
标签,并假设它是正确的……
$ols = $doc->getElementsByTagName('ol');
foreach($ols as $ol){
$lis = $ol->getElementsByTagName('li')[0];
echo $doc->saveHTML($lis).PHP_EOL;
}
这就是回声。
<li>
<span>parent</span>
<ul>
<li><span>nested 1</span></li>
<li><span>nested 2</span></li>
</ul>
</li>
这应该是可行的--但有时还不够精确。
另一种方法是使用XPath,您可以在其中指定要检索的文档标记的级别。它使用//ol/li
,它是任何带有直接子<li>
标记的<ol>
标记。
$xp = new DOMXPath($doc);
$lis = $xp->query("//ol/li");
foreach ( $lis as $li ) {
echo $doc->saveHTML($li);
}
这也给了..。
<li>
<span>parent</span>
<ul>
<li><span>nested 1</span></li>
<li><span>nested 2</span></li>
</ul>
</li>
https://stackoverflow.com/questions/56531942
复制相似问题