Portál AbcLinuxu, 12. května 2025 04:24

Dotaz: PHP XML vlozenie elementu za lastChild

20.9.2015 19:23 maros
PHP XML vlozenie elementu za lastChild
Přečteno: 235×
Odpovědět | Admin
Mám existujúci XML súbpr, kde potrebujem cez PHP pridať doplniť [data] za posledný child, čo je v tomto prípade tretí element. Návody, čo som našiel pridávali element na koniec celého XML.

[root]
  [level1]
    ...
    [level2]
      ...
      [level3]
       ...
      
        [data]
          [name/]
          [address/]
        [/data]
        
        [data]
          [name/]
          [address/]
        [/data]
        
        [data]
          [name/]
          [address/]
        [/data]
        
      [/level3]
       ...
    [/level2]
      ...
  [/level1]
    ...        
[/root]
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

xxxxxx avatar 20.9.2015 20:53 xxxxxx | skóre: 23
Rozbalit Rozbalit vše Re: PHP XML vlozenie elementu za lastChild
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak třeba s DOMDocument by to mělo jít úplně v pohodě, najdete si element level3, vytvoříte si nový element a append k tomu level3 (appendChild). Mrkněte dolů do poznámek k téhle třídě, je tam pěkná ukázka.
21.9.2015 20:09 maros
Rozbalit Rozbalit vše Re: PHP XML vlozenie elementu za lastChild
Ako si nájdem level3?

Na internete je plno manuálov, ktoré sú presne ako tento kód nižšie:
$xml = simplexml_load_file($XML_FILE);  

if ($xml != FALSE) {  
 $level3_node = $xml->level3;  
 $data_node   = $level3_node->addChild("data", "");  
 $data_node->addChild("name");  

 $xml->asXML($XML_FILE);
}
Mne to skončí varovaním a chybou:
Warning: SimpleXMLElement::addChild(): Cannot add child. Parent is not a permanent member of the XML tree in xml.php on line 5
Fatal error: Call to a member function addChild() on a non-object in xml.php on line 6
21.9.2015 20:55 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP XML vlozenie elementu za lastChild
Máš nějakou představu, co asi dělá následující řádek?
$level3_node = $xml->level3;
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.9.2015 22:11 maros
Rozbalit Rozbalit vše Re: PHP XML vlozenie elementu za lastChild
Problém bol v tom, že v dokumente, ktorý je omnoho zložitejší ako príklad v prvom príspevku, je tag level3 viackrát, s čím som vôbec nepočítal.
Potom $level3_node = $xml->level3 vracia prázdny objekt.
Vyzerá to tak, že musí použiť XPath, alebo máte iný názor?
21.9.2015 23:01 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP XML vlozenie elementu za lastChild
Nevrací objekt, ale kolekci. Obvykle stačí použít index do té kolekce.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.