0

我在 php 中获取 xml 数据时遇到问题

我的 xml 相当复杂,标签中有几个嵌套的子级。

xml

?xml version="1.0" encoding="UTF-8"?>

<book id="5">
<title id="76">test title</title>
<figure id="77"></figure>

<ch id="id78">
<aa id="80"><emph>content1</emph></aa>
<ob id="id_84" page-num="697" extra-info="4"><emph type="bold">opportunity.</emph></ob>
<ob id="id_85" page-num="697" extra-info="5"><emph type="bold">test data.</emph></ob>
<para id="id_86" page-num="697">2008.</para>

<body>
   ..more elements
   <content>more contents..
   </content>
</body>
</ch>

我的代码

//I need to load many different xml files.

 $xml_file = simplexml_load_file($filename);
          foreach ($xml_file->children() as $child){
              echo $child->getName().':'. $child."<br>";
          }

上面的代码只会显示

book, title, figure, ch但不是ch标签内的元素。如何显示每个标签内的所有元素?有小费吗?非常感谢!

4

2 回答 2

2

两件事情:

  1. 您需要匹配您的<ob> </objective>标签。

  2. 你的 foreach 需要是递归的。你应该检查你的 foreach 中的每个项目是否有一个孩子,然后递归地遍历这些元素。我建议为此使用递归调用的单独函数。

例子:

$xml_file = simplexml_load_file($filename);
parseXML($xml_file->children());
function parseXML($xml_children)
{
    foreach ($xml_children as $child){
        echo $child->getName().':'. $child."<br>";
        if ($child->count() > 0)
        {
            parseXML($child->children());
        }
    }
}
于 2013-03-21T17:22:34.463 回答
1

你需要做递归调用

parseAllXml($xml_file);

function parseAllXml($xmlcontent)
{
 foreach($xmlcontent->children() as $child)
   {
     echo $child->getName().':'. $child."<br>";
     $is_further_child = ( count($child->children()) >0 )?true:false;  
     if( $is_further_child )
     {
        parseAllXml($child);
     }   
 }
}
于 2013-03-21T17:47:47.987 回答