我有以下HTML
<p class="race-description">
Racing Uk's Profits Returned To Racing Handicap (5)
</p>
<p class="clearer race-info">
<span>Going: SOFT Â |Â </span>
<span>Distance: 6f  | </span>
<span>Age: 3yo+ Â |Â </span>
<span>Total prize money: £5000  | </span>
<span>Runners: 10 Â |Â </span>
<span>Race Type: Flat</span>
</p>
使用以下代码输出
//pull the data for the race
$getdropdown22 = '//div[contains(@class, "content")]/p';
$getdropdown222 = $xpath->query($getdropdown22);
//loop through each individual card
foreach ($getdropdown222 as $dropresults2) {
echo $racename = $dropresults2->c14n();
}
$racename = $dropresults2->c14n();
正在回应您在上面看到的HTML。我想要做的是从第一段获得数据(在这种情况下,赛车英国的利润返回到赛车障碍(5)),我希望从这个案例的第二段得到数据如下:
<span>Going: SOFT Â |Â </span>
<span>Distance: 6f  | </span>
<span>Age: 3yo+ Â |Â </span>
<span>Total prize money: £5000  | </span>
<span>Runners: 10 Â |Â </span>
<span>Race Type: Flat</span>
但我希望将每个范围内的文本转换为单独的变量。
我可以通过以下方式获得第一段:
echo $racename = trim($dropresults2->childNodes->item(0)->textContent);
但如果我将项目(0)更改为项目(1)(我认为是第二段)我什么都没得到? - 我会假设一旦我有了第二段,我将能够使用以下内容提取数据:
$dropresults2->childNodes->item(??)->childNodes->item(*fill with span number*)->textContent
答案 0 :(得分:0)
首先,我认为$dropresults2->childNodes->item(1)
表示第二段元素的假设是错误的。
DOMDocument允许您遍历HTML片段中的所有元素,甚至是空片段,并仔细查看标记,第一个段落元素后面紧跟着一个break元素(<br/>
)。我怀疑这就是所提到的。
如果这是正确的,那么$dropresults2->childNodes->item(2)
应该会得到第二个段落元素,然后您应该从中遍历它的子跨度元素,依次从每个元素中获取文本内容。
修改强>
经过一些讨论后很明显,迭代器的值实际上是依次设置为每个段落节点而不是包含元素$dropresults2
,而是在第一次迭代后导致错误,但返回第二个预期数据。在这种情况下,
$dropresults2->childNodes->item(0)->textContent
实际上代表了第一个段落元素内容的文本节点,这就是返回它的原因,然后在第二次迭代时返回第二个段落元素的所有内容。 / p>