Lesen von Kind-Knoten mit XMLReader

Ich versuche zu schreiben, XMLReader/SimpleXML hybrid-Funktion zu Lesen, eine sehr große (700MB) XML-Datei. Die XML-Datei in diesem format:

<Items>
    <Item>
         <ItemKey>ABCDEF123</ItemKey>
         <Name>
             <English>An Item Name</English>
             <German>An Item Name In German</German>
             <French>An Item Name In French</French>
         </Name>
         <Description>
             <English>An Item Description</English>
             <German>An Item Description In German</German>
             <French>An Item Description In French</French>
         </Description>
    </Item>
    <Item>
         <ItemKey>GHIJKL456</ItemKey>
         <Name>
             <English>Another Item Name</English>
             <German>Another Item Name In German</German>
             <French>Another Item Name In French</French>
         </Name>
         <Description>
             <English>Another Item Description</English>
             <German>Another Item Description In German</German>
             <French>Another Item Description In French</French>
         </Description>
    </Item>
</Items>

Den code, den ich bisher geschrieben haben, um dies zu tun:

$xml = new XMLReader();
if(!$xml->open('testitems.xml')){
    die('Failed to open file!');
} else {
    echo 'File opened';
}

$items = array();

while ($xml->read()){
    if($xml->nodeType == XMLReader::ELEMENT){
        if ($xml->name == 'Item'){
            $item = array();
        }

        if ($xml->name == 'ItemKey'){
            $xml->read();
            $item['itemKey'] = $xml->value;
        }
        if ($xml->name == 'Name'){
            $sxml = new SimpleXMLElement($xml->readOuterXml());
            $englishName = $sxml->English;
            $item['englishName'] = $englishName;
        }
    }
    if($xml->nodeType == XMLReader::END_ELEMENT){
        if ($xml->name == 'Item'){
            $items[] = $item;
        }
    }
}
var_dump($items);
$xml->close();

Jedoch während der ItemKey Knoten-Wert wird in das array eingefügt, der englische Name ist nicht, ich kann nicht scheinen, um Zugriff auf diese Knoten richtig. Ich würde nur mit XMLReader für alles, da es aber wiederholt vorkommen der Englisch-Knoten (einen für den Namen, eine für die Beschreibung) von mein Googeln bisher SimpleXML schien der Weg nach vorne, aber keine Freude noch.

Irgendwelche Vorschläge? Jeder gute Führer? XMLReader-Dokumentation auf php.net ist beklagenswert fehlt in Vergleich zu vielen anderen PHP-Funktionen, und im Allgemeinen scheint es schwer zu finden, detaillierte Anleitungen, die sind klar und übersichtlich.

InformationsquelleAutor MikeK | 2013-06-23
Schreibe einen Kommentar