2011-08-03 4 views
0

XML 문서의 특정 정보를 표시하는 페이지를 만들려고합니다. 나는 이것을 할 수있는 최선의 방법을 찾고자하는 장애물에 빠져 들었다.SimpleXML PHP 서식

내 XML은 Army Builder라는 프로그램에서 작성된 큰 목록입니다. 나는 각 "분대"에 대한 특정 정보를 동적으로 추출하려고 노력 중이다.

는 지금, 내 코드의 샘플은 다음과 같습니다

<?PHP 
     //THIS SECTION FINDS THE SQUAD/UNIT NAME OF THE FIRST ENTITY 
     foreach($squad->xpath('entity') as $squadSub){ 
      $squadSubName = stripslashes($squadSub['name']); 
      $squadSubCount = $squadSub['count']; 


      foreach($squadSub->xpath('unitstat[@id="WS"]/@value') as $squadSubStat){ 
       $unitWs = $squadSubStat; 
      } 

     ?> 
     <tr> 
      <td><?= $squadSubCount; ?></td><td><?= $squadSubName; ?></td><td><?= $unitWs; ?></td><td><?= $unitBs; ?></td><td><?= $unitSt; ?></td><td><?= $unitTo; ?></td><td><?= $unitWo; ?></td><td><?= $unitIn; ?></td><td><?= $unitAt; ?></td><td><?= $unitLd; ?></td><td><?= $unitaSv; ?></td><td><?= $unitiSv; ?></td><td><?= $unitcSv; ?></td> 
     </tr> 

은 "unitWS"를 찾아 줄 내가 대해 요구하고있는 무슨이다. 이제 전체 xpath를 따라 가면, //squad/entity[@name='Nameoftheentity']/unitstat[@id="WS"]/@value을 읽으면 저에게 유닛의 WS가 생깁니다. xml에서 8-13 개 더 많은 값을 가져와야합니다.

내가 당신에게 XML의/unitstat 섹션이 표시됩니다 : 나는,에서, BS에서, LD, 세인트에, WS의 값을 끌어 우와 각 동적으로 저장해야합니다

<unitstat id="iaStruPnt" name="Structure" value="-" /> 
     <unitstat id="iaVdShld" name="Void Shld" value="-" /> 
     <unitstat id="vdrAt" name="At" value="-" /> 
     <unitstat id="vdrBS" name="BS" value="-" /> 
     <unitstat id="vdrMass" name="Mass Point" value="-" /> 
     <unitstat id="vdrSize" name="Size" value="Small" /> 
     <unitstat id="vdrTpt" name="Transport" value="0" /> 
     <unitstat id="vdrVehSv" name="Veh Save" value="-" /> 
     <unitstat id="vdrWS" name="WS" value="-" /> 
     <unitstat id="vdrWpnAP" name="AP" value="-" /> 
     <unitstat id="vdrWpnRang" name="Range" value="-" /> 
     <unitstat id="vdrWpnSh" name="Shots" value="-" /> 
     <unitstat id="vdrWpnStr" name="S" value="0" /> 
     <unitstat id="vdrWpnType" name="Type" value="0" /> 
     <unitstat id="At" name="At" value="2/3" /> 
     <unitstat id="BS" name="BS" value="4" /> 
     <unitstat id="Fam" name="Familiar" value="0" /> 
     <unitstat id="Front" name="FA" value="0" /> 
     <unitstat id="Group" name="Grp" value="" /> 
     <unitstat id="In" name="In" value="4" /> 
     <unitstat id="Ld" name="Ld" value="10" /> 
     <unitstat id="Rear" name="RA" value="0" /> 
     <unitstat id="Save" name="Save" value="2+/5(i)" /> 
     <unitstat id="Side" name="SA" value="0" /> 
     <unitstat id="St" name="St" value="4" /> 
     <unitstat id="To" name="To" value="4" /> 
     <unitstat id="WS" name="WS" value="4" /> 
     <unitstat id="Wo" name="Wo" value="1" /> 
     <unitstat id="iaAmmo" name="Ammo Load" value="0" /> 
     <unitstat id="iaCrew" name="Crew" value="-" /> 
     <unitstat id="iaMinRge" name="Min Rge" value="n/a" /> 
     <unitstat id="iaPowField" name="PowerField" value="-" /> 

을 발견 된 단위. I가 볼 수있는 유일한 방법이 입력하는 경우 : 모든 값 중 하나와 서브 그룹 모두에 대한

foreach($squadSub->xpath('unitstat[@id="WS"]/@value') as $squadSubStat){ 
    $unitWs = $squadSubStat; 
} 

. 필요한 특정 ID에서 모든 값을 가져 오는 더 쉬운 방법이 있습니까?

나는 배열을 작성한 다음 호출해야한다고 가정합니다.

자세한 정보가 필요하면 알려주세요.

답변

1

"or"연산자를 사용합니까?

<?php 
$squadSub->xpath('unitstat[@id="WS" or @id="BS" or @id="whatever"]/@value'); 

편집 : 내가 오해
죄송합니다. 여기에 제 제안이 있습니다 :

<?php 
$units = array(); 

foreach (array('WS', 'BS', 'Save') as $id) 
{ 
    if ($tmp = $squadSub->xpath("unitstat[@id='$id']")) 
     $units[$id] = (string)$tmp[0]['value']; 
} 

print_r($units); 
+0

Very Nice !! 전문가가 바로 거기에! 대단히 감사합니다! 20 골드 !! – ntgCleaner