首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DOMDocument中的ul / li菜单元素中提取数据

从DOMDocument中的ul / li菜单元素中提取数据
EN

Stack Overflow用户
提问于 2018-05-28 18:37:44
回答 1查看 368关注 0票数 1

我有一个菜单项ol / li的列表,我想从中提取数据:标题,URL,标签和DESC从指定的类ol (条目-3)。我写了一个代码不起作用,我不能处理它,你有没有提示我做错了什么?

菜单:

代码语言:javascript
复制
<ol class="items-1">/*---*/</ol>
<ol class="items-2">/*---*/</ol>
<ol class="items-3">
  <li>
    <div class="title">[TITLE]</div>
    <a href="[URL]">
      <span class="tags">[TAGS]</span>
      <span class="desc">[DESC]</span>
      /*---*/
    </a>
  </li>
  <li>
    <div class="title">[TITLE]</div>
    <a href="[URL]">
      <span class="tags">[TAGS]</span>
      <span class="desc">[DESC]</span>
      /*---*/
    </a>
  </li>
  <li>
    <div class="title">[TITLE]</div>
    <a href="[URL]">
      <span class="tags">[TAGS]</span>
      <span class="desc">[DESC]</span>
      /*---*/
    </a>
  </li>
</ol>

脚本

代码语言:javascript
复制
<?php
$html = '<ol class="items-1">/*---*/</ol>
    <ol class="items-2">/*---*/</ol>
    <ol class="items-3">
      <li>
        <div class="title">[TITLE]</div>
        <a href="[URL]">
          <span class="tags">[TAGS]</span>
          <span class="desc">[DESC]</span>
          /*---*/
        </a>
      </li>
      <li>
        <div class="title">[TITLE]</div>
        <a href="[URL]">
          <span class="tags">[TAGS]</span>
          <span class="desc">[DESC]</span>
          /*---*/
        </a>
      </li> </ol>
';

$dom = new DOMDocument();
$dom->loadHTML($html); 
$ol = $dom->getElementsByTagName("ol")[2]; //for items-3 class
$li = $ol->getElementsByTagName("li");
foreach ($li as $element) {
    $title = $element->getElementsByTagName('div')->nodeValue;
    $url = $element->getElementsByTagName('a')->getAttribute('href');
    $tags = $element->getElementsByTagName('span')[0]->nodeValue;
    $desc = $element->getElementsByTagName('span')[1]->nodeValue;
}

?>

谢谢你的帮助:)。

EN

回答 1

Stack Overflow用户

发布于 2018-05-28 19:09:02

getElementsByTagName返回一个DOMNodeList。您必须告诉php您想要使用的项目之一。

因此,类DOMNodeList有一个方法项目(),它通过它在NodeList中的索引返回DOMNode

例如,更改此

代码语言:javascript
复制
$title = $element->getElementsByTagName('div')->nodeValue;

代码语言:javascript
复制
$title = $element->getElementsByTagName('div')->item(0)->nodeValue;

修正后的代码:

代码语言:javascript
复制
$dom = new DOMDocument();
$dom->loadHTML($html); 
$ol = $dom->getElementsByTagName("ol")->item(2); //for items-3 class
$li = $ol->getElementsByTagName("li");
foreach ($li as $element) {
    $title = $element->getElementsByTagName('div')->item(0)->nodeValue;
    $url = $element->getElementsByTagName('a')->item(0)->getAttribute('href');
    $tags = $element->getElementsByTagName('span')->item(0)->nodeValue;
    $desc = $element->getElementsByTagName('span')->item(1)->nodeValue;
}

工作片段:https://3v4l.org/6hcOt

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50571942

复制
相关文章

相似问题

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