PHP DOM解析器可以找到特定类别的DIV的第一个孩子,并搜索每个元素



标题上说我想在这里找到一个特定类的元素的第一个孩子,我想做的是:

更新:我添加了格式。我也想到如何到达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>

最佳解决方案:

		$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>";
		}

如果您想找到TR主体,而不仅仅是使用表格和tbody元素。查找始终返回数组,如果语句与Semicolon一起。

$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);

如果不是您的问题。否则它不起作用,请发表评论。我尚未测试。

最新更新