首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过DOMDocument获取父元素和嵌套元素?

如何通过DOMDocument获取父元素和嵌套元素?
EN

Stack Overflow用户
提问于 2019-06-11 02:47:53
回答 1查看 526关注 0票数 1

在一个典型的HTML中,

代码语言:javascript
复制
<ol>
   <li>
      <span>parent</span>
      <ul>
         <li><span>nested 1</span></li>
         <li><span>nested 2</span></li>
      </ul>
   </li>
</ol>

我尝试获取<li>元素的内容,但需要分别获取parent和嵌套在ul下的内容。

如果像这样走

代码语言:javascript
复制
$ols = $doc->getElementsByTagName('ol');

foreach($ols as $ol){

    $lis = $ol->getElementsByTagName('li');
    // here I need li immediately under <ol>

}

$lis是所有的li元素,包括父元素和嵌套元素。

如何通过忽略更深层次来获取ol下的一个层次的li元素?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 03:20:06

有两种方法可以做到这一点,第一种是如何使用getElementsByTagName(),其想法是挑选出第一个<li>标签,并假设它是正确的……

代码语言:javascript
复制
$ols = $doc->getElementsByTagName('ol');

foreach($ols as $ol){
    $lis = $ol->getElementsByTagName('li')[0];
    echo $doc->saveHTML($lis).PHP_EOL;
}

这就是回声。

代码语言:javascript
复制
<li>
      <span>parent</span>
      <ul>
<li><span>nested 1</span></li>
         <li><span>nested 2</span></li>
      </ul>
</li>

这应该是可行的--但有时还不够精确。

另一种方法是使用XPath,您可以在其中指定要检索的文档标记的级别。它使用//ol/li,它是任何带有直接子<li>标记的<ol>标记。

代码语言:javascript
复制
$xp = new DOMXPath($doc);
$lis = $xp->query("//ol/li");

foreach ( $lis as $li ) {
    echo $doc->saveHTML($li);
}

这也给了..。

代码语言:javascript
复制
<li>
      <span>parent</span>
      <ul>
<li><span>nested 1</span></li>
         <li><span>nested 2</span></li>
      </ul>
</li>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56531942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档