PHP技術者認定・上級

問題 (2019年5月22日)

【SimpleXMLによるXMLの解析】
以下のコード出力として正しいものを1つ選択せよ。

$document simplexml_load_file('bookparse5.xml');
foreach ($document->book as $book) {
 foreach($book->authors->children() as $child) {
  foreach($book->title as $child) {
    echo $child."\n";
  }
 }
}

bookparse5.xmlの内容は下記。

<?xml version="1.0" ?>
<library>
 <book>
   <title>Programming PHP</title>
   <authors>
     <author>Rasmus Lerdorf</author>
     <author>Kevin Tatroe</author>
   </authors>
   <isbn>1-56592-610-2</isbn>
   <comment>A great book!</comment>
 </book>
 <book>
   <title>PHP Pocket Reference</title>
   <authors>
     <author>Rasmus Lerdorf</author>
   </authors>
   <isbn>1-56592-769-9</isbn>
   <comment>It really does fit in your pocket</comment>
 </book>
 <book>
   <title>Learning PHP 5</title>
   <authors>
     <author>David Sklar</author>
   </authors>
   <isbn>0-596-00560-1</isbn>
   <comment>To begin PHP, this is the book you need</comment>
 </book>
</library>

○ 2. 正解です!

【解説】 1つ目のforeach文で、各bookについてということになり、
2つ目のforeach文で、$book->authors->children()で見つかった数だけ、
3つ目のforeach文で、$book->titleを出力することになる。

foreach($book->authors->children() as $child) の $child は使われることなく、
その下の階層のforeach($book->title as $child) の$child が出力され、これはtitleの内容となっている。

注意すべき点は、xmlファイルの1つ目のbookのauthorsには2人のauthorが記述されているため、titleが2回出力されることになる。残りのbookについてはそれぞれ1回ずつの出力である。

Copyright(c) 2011-2019 PHP Engineer Recognition Agency. All rights reserved.
ITトレメの問題や解答、サービスに関するお問い合せはこちらまで
@IT自分戦略研究所フォーラム 新着記事
- PR -