PHP child node-ok egyesítése simple_xml objektumban

PHP child node-ok egyesítése simple_xml objektumban
2013-04-29T21:50:00+02:00
2013-04-29T23:12:02+02:00
2022-11-28T22:41:56+01:00
EliStone
Sziasztok,

Szeretnék egyesíteni child node-okat egy Simple_xml objektumban, csak nem sikerült rájönnöm, hogyan lehetne ezt megoldani, hogyha nem tudom pontosan hány child node lesz az egyes elemeken belül.

például ebben az objektumban szeretném a childnode nevű elemeket egy db childnode elemmé egyesíteni:

SimpleXMLElement Object ( [@attributes] => Array ( [version] => 1.0 ) [item] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [itemid] => 43696 ) [node1] => 1 [node2] => 1 [node3] => 1 [parentnode] => SimpleXMLElement Object ( [childnode] => szöveg [childnode] => még több szöveg ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [itemid] => 123456 ) [node1] => 1 [node2] => 1 [node3] => 1 [parentnode] => SimpleXMLElement Object ( [childnode] => szöveg [childnode] => még több szöveg [childnode] => annál is több ) ) ) )

hogy érthető is legyen amit írtam :) ezt szeretném elérni:

SimpleXMLElement Object ( [@attributes] => Array ( [version] => 1.0 ) [item] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [itemid] => 43696 ) [node1] => 1 [node2] => 1 [node3] => 1 [parentnode] => SimpleXMLElement Object ( [childnode] => szöveg, még több szöveg ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [itemid] => 123456 ) [node1] => 1 [node2] => 1 [node3] => 1 [parentnode] => SimpleXMLElement Object ( [childnode] => szöveg, még több szöveg, annál is több ) ) ) )
Mutasd a teljes hozzászólást!

  • simplexml-lel ez nem olyan egyszerű, mert egy elem értékét tudod módosítani, sőt egy új elemet is létrehozhatsz, de elemet nem tudsz törölni.

    2 lehetőséged van.

    1. A meglévő simplexml "dokumentum" segítségével lépésről lépésre létrehozol egy másik simplexml objektumot, amiben a kérdéses módosítást elvégezted már. Ez gyakorlatilag az xml dokumentumfa rekurzív bejárást jelenti foreach ciklusokkal és a szükséges elemek értékeinek összevonását (sztring összefűzés) jelenti.

    2. Nem simplexml-t, hanem mondjuk DOM-ot (már ha az támogatott a szervereden) használsz. DOM-ban már megtalálható a removeChild() metódus, ami ki tudja szedni a felesleges elemeket.
    Mutasd a teljes hozzászólást!
  • Igazából pont azt csinálom :) csak simple_xml-el olvasom be a fájlt és dom-al újra generálom. Csak ott akadtam el, hogy hogyan egyesítsem egy új elembe a childnode nevűt abban az esetben ha a parentnode elemen belül akárhány childnode lehet azaz elrontottam és csak most vettem észre mert abban az esetben, ha egynél több gyereke van akkor a childnode egy array csak nem tudom javítani az eredetit ezért beteszem ide a javítottat.

    Tehát az eredeti objektum így néz ki (az elérni kívánt eredmény változatlan):


    SimpleXMLElement Object ( [@attributes] => Array ( [version] => 1.0 ) [item] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [itemid] => 43696 ) [node1] => 1 [node2] => 1 [node3] => 1 [parentnode] => SimpleXMLElement Object ( [childnode] => array ( [0] => szöveg [1] => még több szöveg ) ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [itemid] => 123456 ) [node1] => 1 [node2] => 1 [node3] => 1 [parentnode] => SimpleXMLElement Object ( [childnode] => array ( [0] => szöveg [1] => még több szöveg [2] => annál is több ) ) ) ) )
    Mutasd a teljes hozzászólást!
  • foreach-csel feldolgozod a gyermek elemeket, sztring összefűzéssel egy változóba teszed az elemek értékeit, majd a végén létrehozol egy dom elemet, abba beleteszed a változóból az értéket és az elemet a dom fához csatolod.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd