Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php解析xml(多个嵌套的xml)。如果一个嵌套的起作用,则多个嵌套的不起作用_Php_Xml - Fatal编程技术网

Php解析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

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>
$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。我已经更新了我的答案,谢谢。