【问题标题】:How to get only the first result from getElementsByTagName? [duplicate]如何仅从 getElementsByTagName 获取第一个结果? [复制]
【发布时间】:2023-03-09 19:17:01
【问题描述】:

您好,我正在使用代码从 url 地址获取所有图像的地址。 我想问我如何才能只得到第一个结果而不是所有匹配?

这是我正在使用的代码:

<?php


$url="http://grabo.bg/relaks-v-pamporovo-0gk5b";

$html = file_get_contents($url);

$doc = new DOMDocument();
@$doc->loadHTML($html);

$tags = $doc->getElementsByTagName('img');

foreach ($tags as $tag) {
   echo $tag->getAttribute('src');
}

?>

所以请告诉我如何才能只得到一个结果 - 第一个!

提前致谢。

【问题讨论】:

  • @Gordon XML 评估与访问第一个 HTML 元素有何相同之处?认为您对 OP 的要求感到困惑。
  • @defaultNINJA OP 只想获得第一个结果,所以显然他在第一个 img src 值之后,这就是 XPath 所做的。这只是与 $doc-&gt;getElementsByTagName('img')-&gt;item(0)-&gt;getAttribute('src'); 获得相同结果的不同方式。请注意,这个骗局是这个骗局的完全骗局,而不是我评论中链接的那个。
  • @Gordon Gotcha,立即查看,谢谢!

标签: php getelementsbytagname


【解决方案1】:

$tags 是由DOMDocumentgetElementsByTagName 方法创建的DOMNodeList 对象。因此,您可以访问使用DOMNodelist::item ( int $index ) 返回的第一个元素。

为您的代码执行:$tags-&gt;item(0);

【讨论】:

  • 我不明白我必须把这个 $tags-&gt;item(0); 放在哪里,我必须删除什么?
  • @TonnyStruck 您需要访问代码中的第一个元素。 $tags-&gt;item(0); 是第一个元素。因此,您可以使用 $firstElem = $tags-&gt;item(0); 并在需要时访问该变量。
【解决方案2】:

小心一些浏览器选择返回HTMLCollection,这没关系,因为它是NodeList的超集。
Difference between HTMLCollection, NodeLists, and arrays of objects

【讨论】:

  • OP 不在浏览器中。 DOM 是一个与语言无关的接口。
  • 我成功了。你能告诉我如何让它从第三个结果开始索引到最后吗?
  • 试试这个echo $tags-&gt;item(0)-&gt;getAttribute('src');。这对我有用。
【解决方案3】:

用途:

$tags = $doc->getElementsByTagName('img')[0];

获取数组中的第一个元素。

【讨论】:

  • $tags 不是一个数组,而是一个DOMNodeList,它没有实现ArrayAccess
  • 它不工作Parse error: syntax error, unexpected '[' in /home/superweb/public_html/maxoferti/test.php on line 12
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多