繁体   English   中英

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

[英]Extracting data from the ul / li menu elements in DOMDocument

我有一个菜单项ol / li的列表,我要从中提取数据:指定类ol(项目3)中的TITLE,URL,TAGS和DESC。 我写的代码行不通,我无法处理,您是否暗示我在做什么错?

菜单:

<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>

脚本

<?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;
}

?>

感谢所有的帮助:)。

getElementsByTagName返回DOMNodeList 您必须告诉php您要使用哪一项。
因此,类DOMNodeList具有方法item() ,该方法通过NodeList中的索引返回DOMNode

例如改变这个

$title = $element->getElementsByTagName('div')->nodeValue;

$title = $element->getElementsByTagName('div')->item(0)->nodeValue;

更正的代码:

$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM