-1

次のxmlを解析しようとしていますが、コードが各セクションの最初のタグのみを解析します。

$xml = simplexml_load_string($response);       
foreach ($xml->person as $p) {
  $p = $p->attributes()->name;
  echo "     ".$p. "        ";
}

出力はJoeRayAlexですが、リスト内のすべての人の名前を表示するために必要なので、Joe Jack Ray JohnEdwardAlexである必要があります。

 <?xml version="1.0" encoding="utf-8"?>
 <people>
   <person name="Joe">
   <person name="Jack">
   </person>
   </person>

   <person name="Ray">
   <person name="John">
   <person name="Edward">
   </person>
   </person>

   <person name="Alex">
   </person>
 </people>

xmlを変更する以外に他のオプションはありますか?Webサービスからの応答としてxmlを受け取ったためです。

4

3 に答える 3

1
  1. XML を修正する

  2. 内部要素のデータを本当に出力したい場合は、再帰関数を作成する必要があります。

    function printNames($simpleXMLElement) {
    
        // Print the name attribute of each top level element
        foreach ($simpleXMLElement as $element) {
    
            // Print this elements name.
            $p = $simpleXMLElement->attributes()->name;
            echo "     ".$p."        ";
    
            // Send the inner elements to get their names printed
            foreach ($simpleXMLElement->children() as $child) {
                printNames($child);
            }
        }
    }
    
    
    $xml = simplexml_load_string($response);
    printNames($xml);
    
于 2012-12-28T05:01:20.177 に答える
0

奇妙な XML 構造を考えると、person見つかった要素を探して再帰するか、すべての要素のフラット リストを生成する必要がありますperson

これはxpathアプローチです:

$people = $xml->xpath('descendant::person');

foreach ($people as $person) {
    echo $person['name'], "\n";
}
于 2012-12-28T05:02:26.147 に答える
0

XML を修正しないのはなぜですか?

すなわち

<people>
   <person name="Joe" />
   <person name="Jack" />

   <person name="Ray" />
   <person name="John" />
   <person name="Edward" />

   <person name="Alex" />
 </people>
于 2012-12-28T04:59:21.970 に答える