2014-12-29 145 views
0

我在XML解析還挺新的,我想弄清楚什麼是錯的這段代碼爲什麼會拒絕顯示任何結果呢?PHP XML DOM解析問題

//php code 
    $file=file_get_contents("http://".$_SERVER["HTTP_HOST"]."/sitemap.xml"); 
    $dom = new DOMDocument(); 
    $dom->loadXML($file); 
    $xmlPath = new DOMXPath($dom); 
    $arrNodes = $xmlPath->query('//loc'); 
    foreach($arrNodes as $arrNode){ 
     echo $arrNode->nodeValue; 
    } 

//sitemap.xml 
    <url> 
    <loc>http://calculosophia.com/</loc> 
    </url> 
    <url> 
     <loc>http://calculosophia.com/finance/compound-interest-calculator</loc> 
    </url> 

我可以看到,該文件是越來越成功檢索但當變種傾銷$ arrNodes它給了我object(DOMNodeList)[170]我不知道該怎麼做了進一步

+0

能否請您解釋一下爲什麼-1? –

+0

改變'$ arrNode->項(0) - > nodeValue'到'$ arrNode-> nodeValue' –

+0

@RocketHazmat仍然沒有 –

回答

2
$arrNodes = $xmlPath->query('//loc'); 

此行回國你一個包含0個元素的DOMNodeList。這是因爲根元素(<urlset>)正在聲明一個名稱空間(xmlns屬性)。 XPath需要知道該名稱空間,然後才能使用它來查詢該文件。

$xmlPath = new DOMXPath($dom); 
// The 1st parameter is just name, it can be whatever you want 
// The 2nd parameter is the namespace URL (the value of the "xmlns" attribute) 
$xmlPath->registerNamespace('sitemap', 'http://www.sitemaps.org/schemas/sitemap/0.9'); 
$arrNodes = $xmlPath->query('//sitemap:loc'); 
+0

感謝它的工作!我在PHP中老了,這件事永遠不會出現在我的腦海中,儘管我不知道他們爲什麼會這樣呢?這有點愚蠢嗎? –