php
  • xpath
  • 2011-05-27 66 views 0 likes 
    0

    我在PHP上,并成功通过URL加载HTML文档。现在我也成功处理了第一个XPath,但是我在同一个DOMDocument()上的第二个似乎总是失败,没有错误,但只有没有结果。这是我的代码或我错过任何其他东西(我想testwise从苹果在App-Store站点刮信息,实际上是指定的应用程序的说明:双Xpath与PHP不工作

    //retrieving description 
    $path2 = "//div[@class='product-review'][1]/p[@class='truncate']"; 
    $result_row = $xpath->query($path2); 
    print_r($result_row); 
    foreach($result_row as $rows){ 
        echo "haben was"; 
        print_r($rows); 
        $desc = $rows->childNodes->item(0)->textContent(); 
    } 
    
    +0

    这将有助于查看html和第一个路径。为什么不把它合并成一条路? – 2011-05-27 13:12:27

    +0

    不错的建议Gordon,但我需要搜索应用ID,api使用的是名称,而不是使用@tandu收集的id:这可以用作示例HTML源代码:http://itunes.apple .com/de/app/formulary-math-pro/id387851294?mt = 8#这是我的xpaths $ dom = new DOMDocument(); \t \t \t \t \t $ dom-> loadHTML($ data); \t \t \t \t \t $ xpath = new DOMXPath($ dom); \t \t \t \t \t $ path =“// ul [@ class ='list']/li [8]”; \t \t \t \t \t $ result_rows = $ xpath-> query($ path); \t \t \t \t \t的foreach($ result_rows为$行){ \t \t \t \t \t \t $ dev的= $行向> childNodes->项(1) - >的nodeValue; \t \t \t \t \t} – 2011-05-27 13:37:49

    回答

    0

    你可以得到相当太多的一切,但顾客评论来自AppStore by using the public API

    $appStore = json_decode(
        file_get_contents(
         'http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id=387851294' 
        ) 
    ); 
    echo $appStore->results[0]->description; 
    

    Example of full Json Result

    0

    这似乎是一个命名空间的问题,你的榜样HTML源与

    开始。
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
    <html xmlns="http://www.apple.com/itms/" lang="de"> 
    

    xmlns表示文档具有默认名称空间,因此您的所有XPath查询都需要引用该名称空间以查找任何元素。 (有趣的是,他们在doctype中声称这是一个XHTML文档,但它们未能在XHTML名称空间中设置它。)

    您需要注册<html>使用的默认名称空间。因为<html>位于默认名称空间中,所以它没有任何前缀,但为了使XPath正常工作,您还需要将此名称空间绑定到某个前缀,然后在您的XPath表达式中使用该前缀。

    $your_xml_doc->registerXPathNamespace("ns", "http://www.apple.com/itms/"); 
    $path2 = "//ns:div[@class='product-review'][1]/ns:p[@class='truncate']"; 
    

    的XPath(1.0)没有命名空间前缀表达式匹配总是只在没有命名空间的目标。

    相关问题