2010-08-18 3 views
0

안녕하세요, PHP에서 simplexml을 사용하여 XML 피드를 구문 분석하려고합니다. 다음 XML 피드가 배치되어SimpleXML을 사용하여 다중 항목을 반복합니다.

부재 요소는 XML 문서에 반복해서 루프
<Member> 
    <MemberType>Full</MemberType> 
    <JoinDate>2010-06-12</JoinDate> 
    <DataType>A</DataType> 
    <Data> 
     <FirstName>Ted</FirstName> 
     <LasttName>Smith</LasttName> 
     <Data1>56</Data1> 
     <Data2>100</Data2> 
     <Data3>120</Data3> 
    </Data> 
</Member> 
<Member> 
    <MemberType>Full</MemberType> 
    <JoinDate>2010-06-12</JoinDate> 
    <DataType>B</DataType> 
    <Data> 
     <FirstName>Ted</FirstName> 
     <LasttName>Smith</LasttName> 
     <Data1>57</Data1> 
     <Data2>110</Data2> 
     <Data3>130</Data3> 
    </Data> 
</Member> 
<Member> 
    <MemberType>Full</MemberType> 
    <JoinDate>2010-06-12</JoinDate> 
    <DataType>C</DataType> 
    <Data> 
     <FirstName>Ted</FirstName> 
     <LasttName>Smith</LasttName> 
     <Data4>58</Data4> 
     <Data5>115</Data5> 
     <Data6>230</Data6> 
    </Data> 
</Member> 

하지만 데이터는 변경 내부. 무슨 일을하려고하면 특정 회원에 대한 모든 데이터를 SQL 데이터베이스에 입력하는 것입니다. 그래서 이상적으로이 모든 것을 db에 한 줄에 입력하고 싶습니다. XML 피드에는 '전체'또는 '연결'과 같은 여러 멤버 유형이 포함되어 있습니다.

현재 모든 정회원을 반복하고이 특정 회원의 모든 데이터를 가져 오려고합니다. 테드 Bloggs에이 데이터 유형 A, B 및 C

$PLF = simplexml_load_file('../XML/Members.xml'); 

foreach ($PLF->Root->xpath('//Member') as $member) { 

    if ($member->MemberType == 'Full') { 


     echo $member->MemberType.'<br/>'; 
     echo $member->JoinDate.'<br />'; 
     echo $member->DataType.'<br/>'; 
     echo $member->Data->FirstName.'<br/>'; 
     echo $member->Data->LastName.'<br/>'; 
     echo $member->Data->Data1.'<br/>'; 
     echo $member->Data->Data2.'<br/>'; 
     echo '<br />'; 


     }} 

난에있는 코드 세 부재 태그 데이터를 갖는 상기 각각의 부재에 대한 데이터는 세 부분으로 분리 된 부재 태그 각각으로 분할되고 순간은 각 루프에서 첫 번째 유형 (유형 A)의 데이터 만 가져올 수 있으며 모든 유형 A, B 및 C를 동일한 루프에 결합하려고합니다. 그래서 Ted Smith와 같은 각 멤버의 모든 데이터를 DB의 한 줄로 가져올 수 있습니다.

답변

1

간단한 xml을 사용하여 일부 원격 파일을 읽고 루프도 통과시킵니다. 이것은 내 코드입니다 :

  $sUrl  = "some url"; 
     $sContent = file_get_contents($sUrl); 

     $oXml  = new SimpleXMLElement($sContent); 

     $aReturn = array(); 

     foreach ($oXml->children() as $oStation) 
     { 
      $iRackId = (int)$oStation->rack_id; 
      $dLong  = (double)str_replace(",", ".", $oStation->longitute); 
      $dLati  = (double)str_replace(",", ".", $oStation->latitude); 
      $sDescription = (string)$oStation->description; 

      $aRes = array(); 
      $aRes['rack_id']  = $iRackId; 
      $aRes['longitute']  = $dLong; 
      $aRes['latitude']  = $dLati; 
      $aRes['description'] = utf8_decode($sDescription); 

      if ($dLong > 0 && $dLati > 0) 
       $aReturn[$iRackId] = $aRes; 
     } 

XML 파일의 결과를 배열에 넣습니다. 나중에 코드에서 데이터를 데이터베이스에도 저장합니다.

희망이 도움이되었습니다. 나는 xpath를 사용하지 않는다 ... 그것에 문제가 있었고 그들을 정리할 시간이 없었다. 이것은 나를 위해 작동하는 것 같다.

Br, Paul Peelen

관련 문제