PHP DOM getElementsbytagname()getElementById()

时间:2017-04-25 14:48:53

标签: php parsing dom html-parsing domdocument

我正在使用PHP并查看DOM来解析html并在页面上找到某些信息。

我使用getElementsbyTagName()

运行良好的代码
foreach ($dom->getElementsByTagName('div') as $node) {
          $array_data[ ] = $node->nodeValue;
        }

print_r($array_data);

在页面上,我看到有很多<div>个。 我感兴趣的div在页面上有一个唯一的id。 我想我可以选择这个特定的信息通过更新我的代码来查看id如下:

foreach ($dom->getElementById('tree___34LHOENOP7') as $node) {
          $array_data[ ] = $node->nodeValue;
        }

print_r($array_data);

此代码似乎不起作用。 html:

<div id="tree___34LHOENOP7" style="margin-top: 5px; font-family: Verdana, Arial, sans-serif; height: 528px; overflow: auto;">
<ul><li style="list-style-type:none;"><span style="cursor:pointer;color:#D99F00;" onclick="prtv_C_E(this,'ExpandableRegionClickHandler','',2,true);(2,this);">UK</span><img src="https://images... " title="re-centre map here" onclick="ExpandableRegionClickHandler(2,this);" style="display:inline;margin-left:7px;cursor:pointer;"><ul style="display:block;"><li style="list-style-type:none;"><span style="cursor:pointer;color:#D99F00;" onclick="prtv_C_E(this,'ExpandableRegionClickHandler','',59,true);ExpandableRegionClickHandler(59,this);">Channel Islands</span><img src="https://images... " title="re-centre map here" onclick="ExpandableRegionClickHandler(59,this);" style="display:none;margin-left:7px;cursor:pointer;"><ul style="display:none;"><li style="list-style-image:url('http://images…’);"><a class="MapEventName" href="http://www... /guernsey" onclick="EventSpanClick(1439,this);" onmouseover="EventSpanMouseOver(1439,this);" onmouseout="EventSpanMouseOut(1439,this);">Guernsey</a></li>

3 个答案:

答案 0 :(得分:0)

文档解释得很好:

<强>的getElementById:

  

通过其ID返回对元素的引用; ID是一个字符串,可用于唯一标识在HTML id属性

中找到的元素

<强>的getElementsByTagName:

  

Element.getElementsByTagName()方法返回实时   HTMLCollection具有给定标记名称的元素。

您不需要将foreach与getElementById一起使用,因为您只获得一个元素。

答案 1 :(得分:0)

希望这会对您有帮助,DOMDocument::getElementById将返回DOMElement Object

$domObject= new DOMDocument();
$domObject->loadHTML($source);//put your complete source html string here
$result=$domObject->getElementById("tree___34LHOENOP7");//this will output DOMElement Object
print_r($result->nodeValue);

答案 2 :(得分:-1)

查看名称getElementsByTagName包含复数 元素,但getElementById包含单数 元素

当你使用getElementsByTagName时,你必须循环结果。

当你使用getElementById时,没有什么可以循环的。你得到一个结果。删除循环。

$node = $dom->getElementById('tree___34LHOENOP7');
$array_data[ ] = $node->nodeValue;
print_r($array_data);