Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Parsování XML pomocí SimpleXMLElement

Aktivity
Avatar
Pavol Hejný
Tvůrce
Avatar
Pavol Hejný:24.2.2018 17:14

Ahoj,
potřeboval bych poradit s parsováním XML v PHP pomocí SimpleXMLElement:

Když mám jednuduché XMLko:

<parent>
        text1
        <child>text2</child>
        <child>text3<foo/></child>
        text4
</parent>

a z něj vytvořím SimpleXMLElement.

<?php
$doc = new SimpleXMLElement('<parent>text1<child>text2</child><child>text3<foo/></child>text4</parent>');
print_r($doc->children()[0]);
print_r($doc->children()[1]);
?>

Nedokážu dostat texty z elementů, které mají nějaký child.

Ten první print_r vypíše to, co bych očekával:

SimpleXMLElement Object
(
    [0] => text2
)

Ale ten druhý už ignoruje text3 kvůli elementu foo.

SimpleXMLElement Object
(
    [foo] => SimpleXMLElement Object
        (
        )

)

Víte nějaký rozumný způsob, jak tohle řešit? Díky moc.

Odpovědět
24.2.2018 17:14
/^(web )?(app )?developer$/
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Pavol Hejný
Jindřich Máca:24.2.2018 17:35

Ahoj, víme. :-`

Když totiž napíšeš:

echo $doc->children()[1];

Tak Ti to vrátí přímo "text3".

V dokumentaci je totiž napsáno, že textový obsah XML elementu dostaneš pomocí magické metody __toString() viz. - http://php.net/…lelement.php

Také je tam mimochodem napsáno:

Note: SimpleXML has made a rule of adding iterative properties to most methods. They cannot be viewed using var_dump() or anything else which can examine objects.

Každopádně pokud jsi tedy chceš uložit tu hodnotu do proměnné, stačí udělat obyčejné přetypování na string:

$text = (string) $doc->children()[1];
var_dump($test); // string(5) "text3"

Toť celá magie. :D

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
24.2.2018 17:35
Avatar
Pavol Hejný
Tvůrce
Avatar
Odpovídá na Jindřich Máca
Pavol Hejný:25.2.2018 0:55

Díky,
to je přesně, co jsem potřeboval.

Nahoru Odpovědět
25.2.2018 0:55
/^(web )?(app )?developer$/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.