2009-07-28 5 views
1
<?php 
$xmlstr = <<<XML 
<books> 
    <book> 
     <title>Great American Novel</title> 
     <plot> 
     Cliff meets Lovely Woman. 
     </plot> 
     <success type="bestseller">4</success> 
     <success type="bookclubs">9</success> 
    </book> 
    <book> 
     <title>Man Bites Dog</title> 
     <plot> 
     Reporter invents a prize-winning story. 
     </plot> 
     <success type="bestseller">22</success> 
     <success type="bookclubs">3</success> 
    </book> 
</books> 
XML; 
?> 


<?php 

$xml = new SimpleXMLElement($xmlstr); 

foreach ($xml->book[0]->success as $success) { 
    switch((string) $success['type']) { 
    case 'bestseller': 
     echo $success, ' months on bestseller list<br />'; 
     break; 
    case 'bookclubs': 
     echo $success, ' bookclub listings<br />'; 
     break; 
    } 
} 

?> 

자습서 사이트에서이 코드를 잘라내어 잘되었습니다. 나는 내 뜻대로 그것을 바꾸려고 노력하고있다. 하지만 내가 원하는대로 할 수는 없습니다. 첫 번째 인스턴스뿐만 아니라 모든 성공 유형을 인쇄하려고합니다. 이 xml 피드에는 단 두 권의 책과 제목이 있습니다. 구문 분석하려는 XML 피드는 더 많은 정보를 갖지만 구조는 동일하며 인쇄 할 수있는 유일한 결과는 4와 9입니다. 첫 번째 도서 제목입니다.PHP로 XML 파싱하기

답변

2

코드는 첫 번째 책 (book [0])을 통해서만 반복됩니다. 먼저 모든 책을 반복하도록 수정해야합니다.

foreach ($xml->book as $book){ 
    foreach ($book->success as $success) { 
    switch((string) $success['type']) { 
4

이 줄 문제입니다 :

foreach ($xml->book[0]->success as $success) 

귀하와 부스 배열의 첫 번째 요소를 참조하는 "예약 [0]". '당신이 유래에 입력 코드의 각 라인은 4 자리 이상으로 들여 쓰기, 그래서 사이트가 실현이 코드 확인

또한
foreach ($xml->book as $book) { 
    foreach($book->success as $success) { 
     // switch/case goes here 
    } 
} 

, 보조 노트와 아무튼 : 당신은 같은로 변경해야합니다 그 밖의 것들

1

print_r()을 사용하여 SimpleXML 객체의 거의 모든 섹션을 디버깅 할 수 있습니다.

+0

XML에 네임 스페이스가있는 경우를 제외하고는 다른 모든 불건전 한 사항에 빠지게됩니다. –

관련 문제