【问题标题】:PHP DOM Parser Find First Child of Div With Specific Class and Search Each ElementsPHP DOM Parser 查找具有特定类的 Div 的第一个子元素并搜索每个元素
【发布时间】:2017-04-07 22:10:00
【问题描述】:

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

更新:我添加了格式。我还想出了如何到达身体。但归根结底,我要做的是检查 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>";
		}

【问题讨论】:

  • 好的,现在我有一个问题要问你。我们是否神奇地知道您的 DOM 结构是什么样的?输出是什么,desired 输出是什么?红地毯在哪里?
  • @Xorifelse 哦,谢谢你提醒我。我已经在代码中添加了它。还修改了我想要做什么的描述。 tbody 包含整数值。如果它为空,那么它们默认为“--”。如果每个都包含一个整数,我将如何检查 tbody?

标签: php html arrays dom


【解决方案1】:

如果你想找到 tr body 而不仅仅是使用 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);

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

【讨论】:

  • 但是如果有两个
    具有 sam 结构怎么办。我简化了它。我还没有尝试过,但我相信它会抓住他们两个,这就是为什么我在我的帖子中采用了另一种奇怪的方法
  • 那个网站的html总是在改变它的结构?最重要的是你想要什么。如果您想从(如果您指定的该类有更多节元素)获取数据,则两个节代码将相同。如果仅从第一部分代码将更改。请告诉我你到底想要什么?
  • @potion 如果你想从第一部分删除数据而不是使用$data= $html-&gt;find("table[class=headerBgLeft] tbody",0);
  • 没有网站结构是静态的。所以有两个相同类的表。这似乎行得通。选择第二张桌子怎么样?
  • @potion 如果你想从第二部分删除数据而不是使用$data= $html-&gt;find("table[class=headerBgLeft] tbody",1);
猜你喜欢
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2013-04-14
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多