2012-11-18 3 views
0

나는이 나는 다음과 같은 새로운 구조를 취득 할 수있는 방법이simplexmlement 목록의 순서를 반대로 바꾸려면 어떻게해야합니까?

<aaaa> 
    <bbbb>0000</bbbb> 
    <cccc>0000</cccc> 
    <dddd> 
     <eeee> 
      <gggg>1111</gggg> 
      <hhhh>2222</hhhh> 
      <mmmm>3333</mmmm> 
     </eeee> 
     <eeee> 
      <gggg>4444</gggg> 
      <hhhh>5555</hhhh> 
      <mmmm>6666</mmmm> 
     </eeee> 
     <eeee> 
      <gggg>7777</gggg> 
      <hhhh>8888</hhhh> 
      <mmmm>9999</mmmm> 
     </eeee> 
    </dddd> 
</aaaa> 

같은 SimpleXML을 객체? 내가 array_reverse로 되돌릴 수 DDDD의 자녀를 반복하고 객체의 배열에 삽입하려고했습니다

<aaaa> 
    <bbbb>0000</bbbb> 
    <cccc>0000</cccc> 
    <dddd> 
     <eeee> 
      <gggg>1111</gggg> 
      <hhhh>2222</hhhh> 
      <mmmm>3333</mmmm> 
     </eeee> 
     <eeee> 
      <gggg>4444</gggg> 
      <hhhh>5555</hhhh> 
      <mmmm>6666</mmmm> 
     </eeee> 
     <eeee> 
      <gggg>7777</gggg> 
      <hhhh>8888</hhhh> 
      <mmmm>9999</mmmm> 
     </eeee> 
    </dddd> 
    <ffff> 
     <eeee> 
      <gggg>7777</gggg> 
      <hhhh>8888</hhhh> 
      <mmmm>9999</mmmm> 
     </eeee> 
     <eeee> 
      <gggg>4444</gggg> 
      <hhhh>5555</hhhh> 
      <mmmm>6666</mmmm> 
     </eeee> 
     <eeee> 
      <gggg>1111</gggg> 
      <hhhh>2222</hhhh> 
      <mmmm>3333</mmmm> 
     </eeee> 
    </ffff> 
</aaaa> 

(새로운 요소 FFFF 역순으로 DDDD의 자식 같은 목록을 포함) ...하지만 때 주요 구조체에 다시 개체를 삽입하려고하면 결과가 부러 지거나 불완전합니다.

+0

"하지만 다시 주요 구조에서 개체를 삽입 할 때, 결과는/깨진 불완전"- 당신은 XSLT 봤어이 – zerkms

+0

정교한? –

답변

1

이러한 하위 요소를 반복하여 새로운 <ffff> 요소에 올바른 순서로 삽입 할 수 있습니다.

기존의 SimpleXMLElement 사용법과 DOM extension과 함께 사용 가능한 추가 기능을 혼합하면 가장 쉽게 수행 할 수 있습니다. 중간 배열이나 정렬 할 필요가 없습니다.

$aaaa = simplexml_load_string($xml_string); 

// Add new <ffff> element 
$ffff = $aaaa->addChild('ffff'); 

// Get DOMElement instance for <ffff> 
$ffff_dom = dom_import_simplexml($ffff); 

// Loop over <dddd> children and prepend to <ffff> 
foreach ($aaaa->dddd->children() as $child) { 
    $child_copy = dom_import_simplexml($child)->cloneNode(TRUE); 
    $ffff_dom->insertBefore($child_copy, $ffff_dom->firstChild); 
} 

// Go back to SimpleXML-land and see the result 
echo $aaaa->saveXML(); 

(See this example running online.)

+0

좋습니다! 나는 하이브리드 솔루션을 사용하려고 노력해 왔지만, DOM 확장 기능이 매우 좋지 않다 ... 정말 고마워. – SimonQuest

관련 문제