2012-02-28 3 views
0

원래 XML 형식의 객체 배열에 객체를 삽입하는 PHP 스크립트를 작성하려고합니다. 지정된 인덱스에 개체를 삽입 한 다음 업데이트 된 개체로 데이터를 가져온 XML 파일을 다시 써야합니다. 여기에 내가 bar_id = 0의 ID와 바에서 일하는 바텐더가있는 경우객체 배열에 객체 삽입 PHP

즉 그래서
<?xml version="1.0" encoding="UTF-8"?> 
<Bars> 
    <Bar> 
     <BarName>Kam's</BarName> 
     <bar_id>0</bar_id> 
     <Bartenders> 
      <Bartender> 
       <fname>Max</fname> 
       <lname>Vest</lname> 
       <imageURL>http://uofi-bars.com/bartenderImages/maxvest.jpg</imageURL> 
       <shift>2</shift> 
      </Bartender> 
     </Bartenders> 
     <Events> 
      <Event> 
       <EventName>Kams event</EventName> 
       <date>08/10/1989</date> 
      </Event> 
     </Events> 
     <Specials> 
      <Special>Kam's Special 1</Special> 
      <Special>Kam's Special 2</Special> 
     </Specials> 
    </Bar> 

가, 내가의 배열로 그 바텐더를 삽입 할 수 있어야 내 XML의 구조는 그 바에 대한 바텐더.

내가 XML에서 배열을 만들려면 다음 PHP 코드를 사용 : 난 그냥 객체의 배열 내의 객체의 배열을 참조하는 방법을 모르는 것 같아요

function objectsIntoArray($arrObjData, $arrSkipIndices = array()) 
{ 
    $arrData = array(); 

    // if input is object, convert into array 
    if (is_object($arrObjData)) { 
     $arrObjData = get_object_vars($arrObjData); 
    } 

    if (is_array($arrObjData)) { 
     foreach ($arrObjData as $index => $value) { 
      if (is_object($value) || is_array($value)) { 
       $value = objectsIntoArray($value, $arrSkipIndices); // recursive call 
      } 
      if (in_array($index, $arrSkipIndices)) { 
       continue; 
      } 
      $arrData[$index] = $value; 
     } 
    } 
    return $arrData; 
} 
$xmlUrl = "Bars.xml"; // XML 
    $xmlStr = file_get_contents($xmlUrl); 
    $xmlObj = simplexml_load_string($xmlStr); 
    $arrXml = objectsIntoArray($xmlObj); 
    print_r($arrXml); 

을 ... 어떤 도움 대단히 감사하겠습니다!

감사합니다.

+0

XML 파일을 삭제하고 항목을 삽입 할 수있는 테이블로 사용하려고 시도하고 있습니까? –

+0

정확히 이것을 수행하는 더 쉬운 방법은 무엇입니까? – thebiglebowski11

+0

xpath에 대한 자세한 내용은 여기 http://www.w3schools.com/php/func_simplexml_xpath.asp 및 http://code.huypv.net/2009/07/simplexml-xpath-php.html –

답변

2

당신은 당신의 코드를 교체 할 경우이와

$xmlUrl = "Bars.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl); 
$xmlObj = simplexml_load_string($xmlStr); 
$arrXml = objectsIntoArray($xmlObj); 
print_r($arrXml); 

:

$xmlUrl = "Bars.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl); 
$xml = new SimpleXMLElement($xmlStr); 
$bartenders = $xml->xpath('//Bartenders'); 
$new_bartender = $bartenders[0]->addChild('Bartender'); 
$new_bartender->fname = 'test1'; 
$new_bartender->lname = 'test2'; 
$new_bartender->imgURL = 'http://test.com'; 
$new_bartender->shift = '0'; 
print_r($bartenders); 

이 트릭을 할해야, 단지 적절한 값으로 값을 대체 :) 난이 도움이 희망을!

+0

감사합니다. 도움, 내가 가지고있는 bar_id를 먼저 가져 가고 싶으면 해당 막대를 선택한 다음 바텐더 배열에서 해당하는 복제본을 확인하십시오. 내가 게시 한 XML을 살펴보면 태그 – thebiglebowski11

+0

에 몇 가지 막대 객체가 있습니다. 올바른 bar_id를 찾으려면 쿼리를 수행해야한다고 생각합니다. 그런 다음 해당 특정 막대 내에서 다시 쿼리합니다. – thebiglebowski11

+0

xpath를 사용하여 해당 노드 객체를 가져올 수 있으며 특정 케이스에 대한 논리를 적용하기 위해 해당 값을 확인하십시오. 정확하게 후속 질문을 이해하는 경우 :) 또한 질문에 대한 '응답'을 확인하는 것을 잊지 마십시오. –