使用PHP计算XML中的子项数

时间:2015-08-01 10:17:08

标签: php xml simplexml

我知道一些关于php的内容,很抱歉这个问题:

我有这个文件xml:

 <?xml version="1.0" encoding="ISO-8859-1"?>
  <alert>
   <status> </status>
   <nothing> </nothing>
   <info>
    <area>
    </area>
   </info>
   <info>
    <area>
    </area>
   </info>
   <info>
    <area>
    </area>
   </info>
  </alert>

我必须做一个for循环并在每个“foreach”里面 问题是我不知道有什么方法可以知道我必须重复多次循环。因为在这个文件中xml(这是一个例子)我不知道有多少是

如果:

是好的
$url = "pathfile";
$xml = simplexml_load_file($url);
$numvulcani = count($xml->alert->info); // is good ?

for ($i = 0; $i <= $numvulcani; $i++) {
 foreach ($xml->alert->info[$i] as $entry) {
  $area = $entry->area;
 }
}

是真的吗?

抱歉英语不好

3 个答案:

答案 0 :(得分:3)

您需要使用 SimpleXMLElement :: count 函数 - 它会计算元素的子元素。

<?php
$xml = <<<EOF
<people>
 <person name="Person 1">
  <child/>
  <child/>
  <child/>
 </person>
 <person name="Person 2">
  <child/>
  <child/>
  <child/>
  <child/>
  <child/>
 </person>
</people>
EOF;

$elem = new SimpleXMLElement($xml);

foreach ($elem as $person) {
    printf("%s has got %d children.\n", $person['name'], $person->count());
}
?>

输出如下:

  

第1个人有3个孩子。   人2有5个孩子。

另请查看此链接:xml count using php

答案 1 :(得分:0)

尝试将foreach ($xml->alert->info[$i] as $entry)替换为:

 foreach ($xml->alert->info[$i] as $j => $entry)

当前项目索引为$j

答案 2 :(得分:0)

你可能会因此对你有点过分复杂。

首先,您不需要像$xml->alert那样引用 alert 根元素,因为变量{{1}命名的 SimpleXMLElement 表示文档元素已经

其次,你不需要在这里算,你可以直接$xml

foreach

这会迭代作为 alert 元素子元素的三个 info 元素。

我推荐使用Basic SimpleXML usage guide in the PHP manual以获得SimpleXML的良好开端。