无法使用DOMDocument和xpath显示数据,为什么?

时间:2014-04-17 21:11:03

标签: php dom xpath domxpath

我正在尝试从17track.net获取数据,我的意思是当我跟踪数字时,我在结果框中得到了结果,但我无法在我的文件中显示它。

这是我的代码:

<?php
//RA190265307CN is the tracking number 

$result = array();
$classname = "tb-stat";
$domdocument = new DOMDocument();
$domdocument->loadHTMLFile('http://www.17track.net/en/result/post.shtml?nums=RA190265307CN');
$a = new DOMXPath($domdocument);
$spans = $a->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");

for ($i = $spans->length - 1; $i > -1; $i--) {
    $result[] = $spans->item($i)->firstChild->nodeValue;
}

echo "<pre>";
print_r($result);    ?>

这就是数组的结果:

Array
(
    [0] => 
)

我的代码有什么问题?我正在尝试获取跟踪号码的“状态”。

1 个答案:

答案 0 :(得分:0)

firstChild会选择一个空的子<colgroup>。 我想你要替换

$result[] = $spans->item($i)->firstChild->nodeValue;

通过

$result[] = $spans->item($i)->nodeValue;

目前返回

Not Found(0) / Transporting(0) / Pick Up(0) / Delivered(0)

如果您希望进一步深入此字符串,可以利用状态值"(0)"<em>标记中进行支撑的事实。因此,例如将您的XPATH表达式更改为

$query = "//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]//em";

将选择个人状态并将其放入数组result。使用索引0..3,您将能够随机访问状态。如果你想拥有一个数值,你仍然需要从字符串中提取它。