4 Stimmen

SimpleXML: untergeordnete Knoten erhalten

<?xml version="1.0" encoding="utf-8" ?> 
<items>
<aaa>
</aaa>
<aaa>
</aaa>
<aaa>
    <bbb>
    </bbb>
    <bbb>
    </bbb>
    <bbb>
        <ccc>
            Only this childnod what I need
        </ccc>
        <ccc>
            And this one
        </ccc>
    </bbb>
</aaa>
</items>

Ich möchte das XML wie oben angegeben mit PHP analysieren. Ich weiß nicht, wie man diese beiden untergeordneten Knoten zu bekommen.

Wenn ich den nachstehenden Code verwende, wird der Fehler ausgelöst: Warning: main() [function.main]: Cannot add element bbb number 2 when only 0 such elements exist in

<?php
header('Content-type:text/html; charset=utf-8');
$xml = simplexml_load_file('2.xml');
    foreach ($xml->aaa[2]->bbb as $bbb){
        echo $bbb[2]->$ccc; // wrong in here
        echo $bbb[3]->$ccc;
    }
?>

6voto

brian_d Punkte 10944

Utilisez xpath

$ccc = $xml->xpath('aaa/bbb/ccc');
foreach($ccc as $c){
    echo (string)$c."<br/>";
}

Ergebnis:

Only this childnod what I need 
And this one 

Auch bei Ihrem ersten Versuch, $bbb[3] ist nicht sinnvoll, da Sie nur drei Einträge haben, beginnend mit Index 0.

4voto

Kaken Bok Punkte 3395

Ich weiß nicht, wie man die Rückgabe von simplexml verwendet, aber nach dem, was ich in Ihrem Code gesehen habe, sollte dies funktionieren:

<?php
header('Content-type:text/html; charset=utf-8');
$xml = simplexml_load_file('2.xml');
echo $xml->aaa[2]->bbb[2]->ccc[0];
echo $xml->aaa[2]->bbb[2]->ccc[1];
?>

4voto

Steve Robbins Punkte 13238

Eine dynamischere Lösung

<?php
header('Content-type:text/html; charset=utf-8');
$xml = simplexml_load_file('2.xml');
    foreach ($xml->aaa as $aaa){
        if ($aaa->bbb) {
            foreach ($aaa->bbb as $bbb) {
                if ($bbb->ccc)
                    foreach ($bbb->ccc as $ccc) {
                        echo $ccc;
                    }
                }
            }
        }
    }
?>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X