将对象运算符作为字符串传递(PHP)

时间:2011-08-30 04:20:58

标签: php foreach

我正在构建一个脚本,它接收几个(~13个)新闻源的内容并解析XML数据并将记录插入数据库。由于我对feed的结构没有任何控制,我需要为每个对象定制一个对象操作符,以深入到结构中以获取我需要的信息。

如果目标节点在根目录下一步,脚本工作正常,但如果我的字符串包含第二步,则失败('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 :(得分:0)

PHP不会将包含->的字符串神奇地转换为二级搜索。

快速而肮脏的黑客......

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

答案 1 :(得分:0)

虽然Fosco的解决方案可行,但确实很脏。

如何使用xpath而不是对象属性?

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