Передача объектных операторов в виде строк (PHP) - PullRequest
0 голосов
/ 30 августа 2011

Я создаю сценарий, который принимает содержимое нескольких (~ 13) новостных лент, анализирует данные XML и вставляет записи в базу данных.Поскольку у меня нет никакого контроля над структурой каналов, мне нужно настроить оператор объекта для каждого из них, чтобы углубиться в структуру для получения необходимой информации.

Сценарий работает простохорошо, если целевой узел находится на один шаг ниже корня, но если моя строка содержит второй шаг, он завершается неудачно ('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

Ответы [ 2 ]

0 голосов
/ 30 августа 2011

Хотя решение Fosco будет работать, оно действительно очень грязное.

Как насчет использования xpath вместо свойств объекта?

$xml->xpath('deals/deal');
0 голосов
/ 30 августа 2011

PHP не собирается волшебным образом превращать вашу строку, включающую ->, в поиск второго уровня.

Быстрый и грязный хак ...

eval("\$node = \"\$xml->" . $roadmap[$fID] . "\";");
foreach($node as $div) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...