2012-04-11 4 views
0

Die XML ist wie folgt:leeres XML-Objekt bei der Verwendung von SimpleXML - Knoten nicht mehr existiert

<root> 
    <organizations> 
     <organization> 
      <info> 
      <orgID>1234</orgID> 
      <orgName>XYZ Company</orgName> 
      <address> 
       <address1>1 Main Street</address1> 
       <city>Somewhere</city> 
       <state>MI</state> 
       <zip>12334</zip> 
      </address> 
      </info> 
     </organization> 
     </organizations> 
</root> 

Der Code ist wie folgt:

$ind = strpos($xmlResponse, "<"); 
$xml = simplexml_load_string(substr($xmlResponse, $ind)); 
//echo $xml; 
$orgList = $xml->organizations->children(); 

foreach($orgList as $orgList) 
{ 
    echo $orgList->orgName; 
} 

Und bekomme ich folgende Fehlermeldung:

Warning: main() [function.main]: Node no longer exists in...

Die problematische Linie ist foreach($orgList as $orgList)

Kann mir jemand sagen, was ich falsch mache? Ich habe versucht, auf die xml auf 50 verschiedene Arten zuzugreifen und entweder diesen Fehler oder ein leeres XML-Objekt zu bekommen.

Vielen Dank im Voraus!

Antwort

0

Versuchen XPath

Legen Sie die XML in x.xml Datei dann PHP-Datei erstellen:

<?php 
    $xml = simplexml_load_file('x.xml'); 
    $orgList = $xml->xpath("/root/organizations/organization/info"); 
    print $orgList[0]->orgName; 
?> 
+0

+1 für XPath. – trickyzter

+0

Ich erhalte die folgenden zwei Fehler, wenn ich das oben genannte versuche: Nachricht: Undefinierter Offset: 0 in und Nachricht: Versuch, Eigenschaft von Nichtobjekt in – attach

+0

zu bekommen Warum scheint es, dass ich kein xml-Objekt habe? Ich kann das ursprüngliche $ xml aussprechen und bekomme sofort nach dem Laden des Strings über simplexml_load_string eine gültige Ausgabe. – attach

0

Es sieht aus wie Sie das XML-Objekt sind zu überschreiben, wenn Sie Schleife mit $ orgList wie $ orgListe. Versuchen Sie stattdessen:

foreach($orgList as $org) 
    echo $org->orgName; 
0

Versuchen Sie Folgendes:

$xml = simplexml_load_string($xml); 

$org = $xml->organizations->children(); 

foreach($org as $k => $v) 
{ 
    echo $v->info->orgName; 
} 
+0

Die einzigen Änderungen, die ich wirklich gemacht habe, sind: Ändern der Namenskonvention für das Schlüssel/Wert-Paar, das in der Schleife verwendet werden soll, und Hinzufügen eines fehlenden Objektzugriffslevels 'info'. – trickyzter

Verwandte Themen