2015-01-08 3 views
1

웹 서비스에서 XML을 가져 오는 중 표시되는 XML 요소의 순서를 유지하는 데 어려움을 겪고 있습니다.PHP SimpleXmlElement 빈 XML 요소 그룹화

<Blocks> 
 
     <Block> 
 
     <BlockElements> 
 
      <Question QuestionID="QID59" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID3" /> 
 
      <Question QuestionID="QID1" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID2" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID47" /> 
 
     </BlockElements> 
 
     </Block> 
 
     <Block> 
 
     <BlockElements> 
 
      <Question QuestionID="QID6" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID8" /> 
 
      <Question QuestionID="QID49" /> 
 
      <Question QuestionID="QID45" /> 
 
      <Question QuestionID="QID50" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID9" /> 
 
      <Question QuestionID="QID10" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID11" /> 
 
      <Question QuestionID="QID12" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID13" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID14" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID15" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID16" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID17" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID18" /> 
 
      <Question QuestionID="QID19" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID20" /> 
 
      <Question QuestionID="QID21" /> 
 
      <PageBreak /> 
 
      <Question QuestionID="QID22" /> 
 
      <Question QuestionID="QID23" /> 
 
     </BlockElements> 
 
     </Block> 
 
    </Blocks>

웹 서비스는 빈 요소 (태그를 닫지 않고 요소)를 사용합니다 : 여기

은 조각이다. BlockElements 태그 내에서 이러한 요소의 순서는 매우 중요합니다.이 태그는 양식의 레이아웃을 정의합니다. 나는 SimpleXmlElement를 사용하여 PHP 객체로이 XML을 켜면, 이것은 내가 무엇을 얻을 수 있습니다 :

SimpleXMLElement Object 
(
    [Block] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [BlockElements] => SimpleXMLElement Object 
         (
          [Question] => Array 
           (
            [0] => SimpleXMLElement Object 
             (
              [@attributes] => Array 
               (
                [QuestionID] => QID59 
               ) 
             ) 
            [1] => SimpleXMLElement Object 
             (
              [@attributes] => Array 
               (
                [QuestionID] => QID3 
               ) 
             ) 
            [2] => SimpleXMLElement Object 
             (
              [@attributes] => Array 
               (
                [QuestionID] => QID1 
               ) 
             ) 
            [3] => SimpleXMLElement Object 
             (
              [@attributes] => Array 
               (
                [QuestionID] => QID2 
               ) 
             ) 
            [4] => SimpleXMLElement Object 
             (
              [@attributes] => Array 
               (
                [QuestionID] => QID47 
               ) 
             ) 
           ) 
          [PageBreak] => Array 
           (
            [0] => SimpleXMLElement Object 
             (
             ) 
            [1] => SimpleXMLElement Object 
             (
             ) 
            [2] => SimpleXMLElement Object 
             (
             ) 
           ) 
         ) 
       ) 
.... 

[질문 요소와 페이지 나눔의 요소는 배열로 분리하고, 순서가 손실됩니다. 이러한 요소의 순서를 유지하기위한 조언이 있습니까? SimpleXmlElement 사용에 전념하지 않았습니다. 감사!

답변

1

당신은 그 객체의 반복하는 결과를 알 필요는 통찰력이

$parentNode = simplexml_load_string($xml); 
itNode($parentNode); 

function itNode($parentNode){ 
if($parentNode->children()) 
    foreach ($parentNode->children() as $node) 
    { 
    echo "name ==> " , $node->getName(),'<br>'; 
    itNode($node); 
    } 
} 
+0

이 매우 유용합니다, 감사하려고 '에서 print_r'또는 '위해서 var_dump'

의 결과와 동일하지 않습니다 . – user1678033