在典型的HTML中
For
我尝试获取<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
元素放在li
下一个层次上?
答案 0 :(得分:1)
有两种方法,第一种是使用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
,它是任何带有直接后代<ol>
标记的<li>
标记。
$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>