我正在构建一个脚本,它接收几个(~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
答案 0 :(得分:0)
PHP不会将包含->
的字符串神奇地转换为二级搜索。
快速而肮脏的黑客......
eval("\$node = \"\$xml->" . $roadmap[$fID] . "\";");
foreach($node as $div) {
答案 1 :(得分:0)
虽然Fosco的解决方案可行,但确实很脏。
如何使用xpath而不是对象属性?
$xml->xpath('deals/deal');