【问题标题】:Cannot display data using DOMDocument and xpath, why?无法使用 DOMDocument 和 xpath 显示数据,为什么?
【发布时间】:2014-04-17 21:11:02
【问题描述】:

我正在尝试从 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] => 
)

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

【问题讨论】:

    标签: php dom xpath domxpath


    【解决方案1】:

    firstChild 将选择一个空的子 &lt;colgroup&gt;。 我想你想替换

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

    通过

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

    目前返回

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

    如果您想进一步深入到这个字符串,您可以利用状态值"(0)" 包含在&lt;em&gt; 标记中这一事实。因此,例如将您的 XPATH 表达式更改为

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

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

    【讨论】:

    • 真的,谢谢。当我试图只获取数字状态(已交付、正在运输等)时,数组返回空结果。状态类是“s-packState”,我用 firebug 进行了检查。怎么了?
    • 所以你想要一个由四个字符串“(0)”组成的数组?
    • 我尝试获取包裹的正确状态,“未找到(0) / 运输中(1) / 取件(0) / 已送达(0)”,这是我写的代码:pastebin.com/xk1yP7yL 结果很好(我认为),但我如何获得状态(在这种情况下 - 运输)?
    • 不是真的,总是一个状态将是值“(1)”,(如 Transporting (1) ),您的 xpath 查询非常好,但数组总是返回[0] => (0)。我想要做的是 [0] => 运输。 / [0] => Delivered.. etc.. How? 因为状态本身(不是它们的值​​)没有存储在任何标签中。
    • 正确但仍有问题。数组中的所有值都是“(0)”,我猜是因为请求在 17track 完成加载 ajax 之前发送到 17track,只有在 ajax 加载后状态的值才会改变..如何解决这个问题?跨度>
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 2019-04-09
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2016-01-12
    相关资源
    最近更新 更多