2012-11-18 109 views
0

我有SimpleXML對象這樣如何顛倒simplexmlelement列表的順序?

<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> 

我該怎麼做才能獲得如下所示的新的結構? (含新元素FFFF以相反的順序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> 

我試圖重複的DDDD兒童並將其插入對象的數組與array_reverse被逆轉......但是當我嘗試將對象插回到主結構中,結果被破壞/不完整

+0

「但是當我嘗試插入的對象回到主結構,結果是壞了/不完整的」 - 這闡述 – zerkms

+0

你看着XSLT? –

回答

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