PHP DOM解析器找到具有特定类的Div的第一个子节点并搜索每个元素

时间:2016-11-23 18:59:04

标签: php html arrays dom

正如标题所说我试图找到具有特定类的元素的第一个孩子,这就是我想要做的事情:

更新:我添加了格式。我还想到了如何到达tbody。但是在一天结束的时候,我要做的就是检查tbody中的每个元素,如果它们各自等于" - "或不。那我怎么做到这一点?我会将DOM对象转换为字符串吗?什么是有效的方法。

更新2:我找到了一个优雅的解决方案,我更新了我的代码。问题仍然存在:什么是检查是否存在整数的最佳方法?我只是将每个元素转换为字符串然后执行strpos条件吗?

更新3:没关系我弄明白了。下面是解决方案。我不得不更进一步进入表体,选择表格行,然后循环遍历它们。



foreach($html->find('div[class=compareSkillsOuter clear] section[class=playerStats] div[class=tiledBlueFrame] div[class=tableWrap] table[class=headerBgLeft] tbody tr') as $element){
    if($position = strrpos($element, '--');
    if($position !== false){
        echo "String found";
    }
    else{
        echo "String not found";
    }
}




格式:



<div class="compareSkillsOuter clear">
    <section class="playerStats">
        <div class="tiledBlueFrame">
            <div class="tl corner"></div>
            <div class="tr corner"></div>
	    <div class="bl corner"></div>
            <div class="br corner"></div>
            <div class="tableWrap">
                <table class="headerBgLeft">
                    <thead>
                        <tr>
                            <th class="alignleft">Rank</th>
                            <th class="alignleft">Total XP</th>
                            <th class="alignleft">Level</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr >
                            <td class="alignleft"><a href="#">1,700,012</a></td>
                            <td class="alignleft"><a href="#">3,290</a></td>
                            <td class="playerWinLeft alignleft"><div class="relative"><a href="#">55</a></div></td>
                        </tr>
                        <tr class=oddRow>
                            <td class="alignleft"><a href="#">--</a></td>
                            <td class="alignleft"><a href="#">--</a></td>
                            <td class="alignleft"><a href="#">--</a></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </section>
</div>
&#13;
&#13;
&#13;

最佳解决方案:

&#13;
&#13;
		$data = $html->find("table[class=headerBgLeft] tbody",0);
		$data1 = $data->find("tr td a");

		$statistics = Array();

		
		//echo $data1[1]->plaintext;

		foreach($data1 as $tr)
 		{
 			//store each
			echo "$tr 1<br>";
		}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

如果你想找到tr体,而不仅仅是使用table和tbody元素。 find总是返回一个数组,你的if语句是分号。

$data= $html->find("table[class=headerBgLeft] tbody");
$data1=$data->find("td tr");
foreach($data1 as $ed)
 {
    if($ed->innertext=="--")
      echo "String is found";
    else
      echo "String is not found";
 }

如果你只需要找到tbody中的两个破折号并且它们的位置是固定的意味着它们总是在第二个tr中。你可以使用

  $data1=$data->find("td tr",1);

如果不是你的问题。或者它不起作用请评论。我还没有测试过。