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, chchタグ内の要素ではありません。各タグ内のすべての要素を表示するにはどうすればよいですか? 任意のヒント?どうもありがとう!

4

2 に答える 2

2

2つのこと:

  1. タグを一致させる必要があり<ob> </objective>ます。

  2. foreach は再帰的である必要があります。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 に答える