2011-08-30 36 views
0

我構建了一個腳本,它接收幾個(〜13)新聞提要的內容並分析XML數據並將記錄插入到數據庫中。由於我無法控制訂閱源的結構,因此我需要爲每個訂閱者定製一個對象操作符,以深入到結構中以獲取我需要的信息。作爲字符串傳遞對象運算符(PHP)

如果目標節點比根目錄低一級,但腳本工作得很好,但如果我的字符串包含第二步,它會失敗('foo'工作,但'foo-> bar'失敗)。我嘗試過轉義字符和eval(),但我覺得我錯過了一些顯而易見的東西。任何幫助將不勝感激。

// Roadmaps for xml navigation 

$roadmap[1] = "deal"; // works 
$roadmap[2] = "channel->item"; // fails 
$roadmap[3] = "deals->deal"; 
$roadmap[4] = "resource"; 
$roadmap[5] = "object"; 
$roadmap[6] = "product"; 
$roadmap[8] = "channel->deal"; 
$roadmap[13] = "channel->item"; 
$roadmap[20] = "product"; 

$xmlSource = $xmlURL[$fID]; 
$xml=simplexml_load_file($xmlSource) or die(mysql_error()); 

if (!(empty($xml))) { 
    foreach($xml->$roadmap[$fID] as $div) { 

     include('./_'.$incName.'/feedVars.php'); 
     include('./_includes/masterCategory.php.inc'); 
     $test = sqlVendors($vendorName); 

    } // end foreach 
     echo $vUpdated." records updated.<br>"; 
     echo $vInserted." records Inserted.<br><br>"; 
} else { 
    echo $xmlSource." returned an empty set!"; 
} // END IF empty $xml result 

回答

0

雖然Fosco的解決方案將工作,這的確是非常髒。

如何使用xpath而不是對象屬性?

$xml->xpath('deals/deal'); 
+0

謝謝。這是一直困擾着我的那些問題之一,我想我非常專注於不惜一切代價努力工作,我不再想那些明顯的問題。 – Strelka

0

PHP不會奇蹟般地將包含->的字符串轉換爲二級搜索。

快速和骯髒的劈...

eval("\$node = \"\$xml->" . $roadmap[$fID] . "\";"); 
foreach($node as $div) { 
+0

謝謝。我能夠使用這種方法來實現它,但最終我使用了xpath解決方案。然而,它完成了工作! – Strelka