【问题标题】:get HTML element by attribute value in php通过php中的属性值获取HTML元素
【发布时间】:2012-01-13 19:06:15
【问题描述】:

我需要使用 php 从网页中提取一些数据。我感兴趣的部分的结构与此类似:

<a href="somepath" target="fruit">apple</a>
<a href="somepath" target="animal">cat</a>
<a href="somepath" target="fruit">orange</a>
<a href="somepath" target="animal">dog</a>
<a href="somepath" target="fruit">mango</a>
<a href="somepath" target="animal">monkey</a>

首先,我想提取所有水果,然后是所有动物,以便将它们很好地分组。

我想出了如何遍历所有属性值。代码如下:

$dom = new DOMDocument();
$html = file_get_contents('example.html');

@$dom->loadHTML($html);

$a = $dom->getElementsByTagName('a');

for ($i; $i < $a->length; $i++) {
$attr = $a->item($i)->getAttribute('target');

echo $attr . "\n";
}

所以我得到:

fruit animal fruit animal fruit animal

我还发现了如何获取元素的文本内容:

$a->item($i)->textContent

所以,如果包含在循环中并回显,我会得到:

apple cat orange dog mango monkey

我觉得我很接近,但我无法得到我想要的。我需要这样的东西:

if (target = "fruit") then give me "apple, orange, mango".

有人可以指点我正确的方向吗?

谢谢。

【问题讨论】:

    标签: php html dom


    【解决方案1】:

    只需 target 属性上不是 fruitcontinue,然后将元素的 textContent 添加到数组中。

    $nodes = array();
    
    for ($i; $i < $a->length; $i++) {
        $attr = $a->item($i)->getAttribute('target');
    
        if ($attr != 'fruit') {
            continue;
        }
    
        $nodes[] = $a->item($i)->textContent;
    }
    

    $nodes 现在包含将其target 属性设置为fruit 的元素的所有节点。

    【讨论】:

      【解决方案2】:

      使用DOMXPath 和查询:

      $doc = new DOMDocument();
      $doc->Load('yourFile.html');
      
      $xpath = new DOMXPath($doc);
      
      $fruits = $xpath->query("//a[@target='fruit']");
      foreach($fruits as $fruit) {
          // ...
      }
      
      $animals = $xpath->query("//a[@target='animal']");
      foreach($animals as $animal) {
          // ...
      }
      

      参见this 演示。

      【讨论】:

        【解决方案3】:

        制作两个数组

        $fruits=array();
        $animals=array();
        

        t 并在你得到时循环。

        if(target=='fruit') {
           array_push($fruits,$valueofelement);
        
        } else if ($target=='animal') {
           array_push($animals,$valueofelement);
        }
        

        【讨论】:

          猜你喜欢
          • 2016-02-25
          • 1970-01-01
          • 2014-12-01
          • 1970-01-01
          • 2011-11-30
          • 2023-03-30
          • 2021-03-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多