Php解析xml(多个嵌套的xml)。如果一个嵌套的起作用,则多个嵌套的不起作用
Xml是这样的:Php解析xml(多个嵌套的xml)。如果一个嵌套的起作用,则多个嵌套的不起作用,php,xml,Php,Xml,Xml是这样的: <CRates> <Date>20010323</Date> <Currencies> <Currency> <ID>AED</ID> <Units>1</Units> <Rate>0.17200000</Rate> </C
<CRates>
<Date>20010323</Date>
<Currencies>
<Currency>
<ID>AED</ID>
<Units>1</Units>
<Rate>0.17200000</Rate>
</Currency>
<Currency>
<ID>ATS</ID>
<Units>1</Units>
<Rate>0.04102750</Rate>
</Currency>
</Currencies>
</CRates>
$currencies = simplexml_load_file('__joomla.xml');
/**/
$cdate=$currency->Date;
echo "<time>". $date. "</time><br>";
foreach ($currencies as $currency):
$id=$currency->ID;
$units=$currency->Units;
$rate=$currency->Rate;
echo
"
<div class='id'>". $id. "</div>
<div class='units'>". $units. "</div>
<div class='rate'>". $rate. "</div>
";
endforeach;
Php是这样的:
<CRates>
<Date>20010323</Date>
<Currencies>
<Currency>
<ID>AED</ID>
<Units>1</Units>
<Rate>0.17200000</Rate>
</Currency>
<Currency>
<ID>ATS</ID>
<Units>1</Units>
<Rate>0.04102750</Rate>
</Currency>
</Currencies>
</CRates>
$currencies = simplexml_load_file('__joomla.xml');
/**/
$cdate=$currency->Date;
echo "<time>". $date. "</time><br>";
foreach ($currencies as $currency):
$id=$currency->ID;
$units=$currency->Units;
$rate=$currency->Rate;
echo
"
<div class='id'>". $id. "</div>
<div class='units'>". $units. "</div>
<div class='rate'>". $rate. "</div>
";
endforeach;
如果移除20010323并移除末端,则所有工作正常
但如果未删除,则不显示任何内容
请告知需要更正的内容。原因是您正在访问美元货币,就像它的根元素一样。您可以使用$xmlDoc->currencies加载文件和引用货币,它应该可以工作。请尝试以下操作:
$xmlDoc = simplexml_load_file('__joomla.xml');
/**/
$cdate=$xmlDoc->Date;
echo "<time>". $cdate. "</time><br>";
foreach ($xmlDoc->Currencies->Currency as $currency):
$id=$currency->ID;
$units=$currency->Units;
$rate=$currency->Rate;
echo
"
<div class='id'>". $id. "</div>
<div class='units'>". $units. "</div>
<div class='rate'>". $rate. "</div>
";
endforeach;
更新:将$xmlDoc->Currency更新为$xmlDoc->Currency->Currency,因为我们希望循环遍历货币的子项 试试这个:
$currencies = simplexml_load_file('__joomla.xml');
/**/
$cdate = $currencies->Date;
echo "<time>". $date. "</time><br>";
foreach ($currencies->CRates->Currencies->Currency as $currency):
$id = $currency->ID;
$units = $currency->Units;
$rate = $currency->Rate;
echo
"
<div class='id'>". $id. "</div>
<div class='units'>". $units. "</div>
<div class='rate'>". $rate. "</div>
";
endforeach;
您需要使用->子节点来迭代货币的子节点
这很好:-
$xml='<CRates>
<Date>20010323</Date>
<Currencies>
<Currency>
<ID>AED</ID>
<Units>1</Units>
<Rate>0.17200000</Rate>
</Currency>
<Currency>
<ID>ATS</ID>
<Units>1</Units>
<Rate>0.04102750</Rate>
</Currency>
</Currencies>
</CRates>';
$xml1 = simplexml_load_string($xml);
//$xml hold the object iterate through as per requirement
echo '<pre>';
var_dump($xml1);
CRates是根节点,所以你的foreach会失败。你不需要使用子方法,@vinodadhikary更干净更简单。是的,@vinodadhikary方法稍微短一点,少一个变量,但是foreach语句中缺少->Currency,直到现在我才明白。抱歉,无法开始工作。我只是用答案中的代码替换了我的代码。。。工作表不需要foreach$xmlDoc->currences as$currency:若要更改为foreach$xmlDoc->currences->currences as$currency:@user2465936,您是对的,它应该是$xmlDoc->currences currency->currency,因为我们要循环使用currency。我已经更新了我的答案,谢谢。