php
  • xpath
  • 2011-05-27 60 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)沒有命名空間前綴表達式匹配總是隻在沒有命名空間的目標。

    相關問題