如何通过 DOMDocument 获取父元素和嵌套元素?
How to get parent and nested elements by DOMDocument?
在典型的 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
元素,包括父元素和嵌套元素。
如何通过忽略更深的层次来获得 li
个比 ol
低一级的元素?
有两种方法,第一种是你如何使用 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>
在典型的 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
元素,包括父元素和嵌套元素。
如何通过忽略更深的层次来获得 li
个比 ol
低一级的元素?
有两种方法,第一种是你如何使用 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>