从HTML获取数据

时间:2015-07-21 10:29:10

标签: php dom domdocument

我有以下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

1 个答案:

答案 0 :(得分:0)

首先,我认为$dropresults2->childNodes->item(1)表示第二段元素的假设是错误的。

DOMDocument允许您遍历HTML片段中的所有元素,甚至是空片段,并仔细查看标记,第一个段落元素后面紧跟着一个break元素(<br/>)。我怀疑这就是所提到的。

如果这是正确的,那么$dropresults2->childNodes->item(2)应该会得到第二个段落元素,然后您应该从中遍历它的子跨度元素,依次从每个元素中获取文本内容。

修改

经过一些讨论后很明显,迭代器的值实际上是依次设置为每个段落节点而不是包含元素$dropresults2,而是在第一次迭代后导致错误,但返回第二个预期数据。在这种情况下,

$dropresults2->childNodes->item(0)->textContent实际上代表了第一个段落元素内容的文本节点,这就是返回它的原因,然后在第二次迭代时返回第二个段落元素的所有内容。 / p>