simplexml
Sebastian!
- php
0 dedlfix
Guten Mittag,
ich hab gerade ein kleines Problem mit simplexml und stehe da total auf dem Schlauch - vllt. kann mir jemand von euch einen Tipp geben.
Ich habe ein XML Objekt, dass so aussieht:
object(SimpleXMLElement)#2 (9) { ["Count"]=> string(4) "1908" ["RetMax"]=> string(4) "1908" ["RetStart"]=> string(1) "0" ["QueryKey"]=> string(1) "1" ["WebEnv"]=> string(56) "NCID_1_398244165_130.14.22.76_5555_1346144640_1334106840" ["IdList"]=> object(SimpleXMLElement)#11 (1) { ["Id"]=> array(1908) { [0]=> string(8) "22920665" [1]=> string(8) "22920663" [2]=> string(8) "22920661" [3]=> string(8) "22920660" [4]=> string(8) "22920659" [5]=> string(8) "22887827" [6]=> string(8) "22887824" [7]=> string(8) "22857958" [8]=> string(8) "22806858" [9]=> string(8) "22718489" [10]=> string(8) "22703687" [11]=> string(8) "22646983" [12]=> string(8) "22586632" [13]=> string(8) "22535429" [14]=> string(8) "22513699" [15]=> string(8) "22505211" [16]=> string(8) "22500134" [17]=> string(8) "22500133" [18]=> string(8) "22500131" [19]=> string(8) "22488999" [20]=> string(8) "22488997" [21]=> string(8) "22488668" [22]=> string(8) "22473944" [23]=> string(8) "22447616" [24]=> string(8) "22325905" [25]=> string(8) "22305139" [26]=> string(8) "22305133" [27]=> string(8) "22305132" [28]=> string(8) "22302412" [29]=> string(8) "22269574" [30]=> string(8) "22236016" [31]=> string(8) "22223432" [32]=> string(8) "22208834" [33]=> string(8) "22200337" [34]=> string(8) "22195591" [35]=> string(8) "22195589" [36]=> string(8) "22174083" [37]=> string(8) "22170276" [38]=> string(8) "22161998" [39]=> string(8) "22150711" [40]=> string(8) "22143541" [41]=> string(8) "22143540" [42]=> string(8) "22143539" [43]=> string(8) "22135085" [44]=> string(8) "22128309" [45]=> string(8) "22122923" [46]=> string(8) "22119615" [47]=> string(8) "22110022" [48]=> string(8) "22109688" [49]=> string(8) "22109685" [50]=> string(8) "22107031" [51]=> string(8) "22106955" [52]=> string(8) "22105698" [53]=> string(8) "22105693" [54]=> stri
Natürlich nur ein kleiner Ausschnitt. Jetzt möchte ich bitteschön alle IDs aus der IdList in einem PHP Array zusammenfassen. Also habe ich sowas hier geschrieben:
private function FilterIDs($Node) {
foreach($Node->children() as $Name) {
$this->FilterIDs($Name);
if($Name->getName() == "IdList") {
// Hier sollte es erfolgreich sein
}
}
}
Soweit so gut. Wenn ich jetzt getName() == "IdList" nehme, kommt einfach nur mit var_dump($Name) ein:
object(SimpleXMLElement)#6 (1) { ["Id"]=> array(1908) { [0]=> string(8) "22920665" [1]=> string(8) "22920663" [2]=> string(8) "22920661" [3]=> string(8) "22920660" [4]=> string(8) "22920659" [5]=> string(8) "22887827" [6]=> string(8) "22887824" [7]=> string(8) "22857958" [8]=> string(8) "22806858" [9]=> string(8) "22718489" [10]=> string(8) "22703687" [11]=> string(8) "22646983" [12]=> string(8) "22586632" [13]=> string(8) "22535429" [14]=> string(8) "22513699" [15]=> string(8) "22505211" [16]=> string(8) "22500134" [17]=> string(8) "22500133" [18]=> string(8) "22500131" [19]=> string(8) "22488999" [20]=> string(8) "22488997" [21]=> string(8) "22488668" [22]=> string(8) "22473944" [23]=> string(8) "22447616" [24]=> string(8) "22325905" [25]=> string(8) "22305139" [26]=> string(8) "22305133" [27]=> string(8) "22305132" [28]=> string(8) "22302412" [29]=> string(8) "22269574" [30]=> string(8) "22236016" [31]=> string(8) "22223432" [32]=> string(8) "22208834" [33]=> string(8) "22200337" [34]=> string(8) "22195591" [35]=> string(8) "22195589" [36]=> string(8) "22174083" [37]=> string(8) "22170276" [38]=> string(8) "22161998" [39]=> string(8) "22150711" [40]=> string(8) "22143541
Und dementsprechend sollte ich doch mit $Name->Id draufzugreifen können und es einfach in ein PHP Array schreiben können? Geht aber irgendwie nicht! $MyArray = $Name->Id; ergibt nur NULL.
Wenn ich stattdessen ein getName() == "Id" nehme, kommt bei var_dump() aufeinmal:
object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22920665" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22920663" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22920661" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22920660" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22920659" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22887827" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22887824" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22857958" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22806858" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22718489" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22703687" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22646983" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22586632" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22535429" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22513699" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22505211" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22500134" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22500133" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22500131" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22488999" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22488997" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22488668" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22473944" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22447616" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22325905" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22305139" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22305133" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22305132" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22302412" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22269574" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22236016" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22223432" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22208834" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22200337" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22195591" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22195589" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22174083" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22170276" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "22161998" } object(SimpleXMLElement)#8 (1) { [0]=> string(8) "22150711" } object(SimpleXMLElement)#10 (1) { [0]=> string(8) "22143541" } object(SimpleXMLElement)#9 (1) { [0]=> string(8) "2214
Und schon ist jede einzelne ID ein eigenes Objekt ???
Wenn ich dann auf die Idee komme, dass ich doch auch IdList nehme könnte und dann mit $Name->Id[0] nur auf das Array zugreife, da laut meiner Struktur von ganz oben, ja es ungefähr so aussieht: IdList->Id->Array von IDs, dann kommt nur:
object(SimpleXMLElement)#7 (1) { [0]=> string(8) "22920665" }
Und mehr nicht!
Was soll ich jetzt bitte tun, damit ich eine ganz simple Funktion habe, die mir aus der bestehenden Struktur ein stumpfes Array aus IDs bastelt?
Tach!
Ich habe ein XML Objekt, dass so aussieht:
Erwartest du, dass sich jemand freiwillig durch diese Textwüste arbeitet? Die Chancen dürften sehr gering sein. Bitte schreib vor die Kontrollausgabe ein <pre> oder kopiere aus der Quelltextansicht des Browsers. Zudem reicht es aus, wenn du zwei oder drei Werte und nicht gleich hundert zeigst. Weiterhin wäre es besser, wenn du den relevanten Teil aus dem originalen XML zeigtest, dann könnte man das Problem nachstellen.
Und schon ist jede einzelne ID ein eigenes Objekt ???
Das ist die Magie von SimpleXML. Es verhält sich anders als normale Objekte. Je nach Situation bekommt man mal dieses, mal jenes. Vielleicht reicht in deinem Fall ein Typecast zu einem Array, vielleicht muss man was anderes machen. Ich weiß das aber nicht und müsste selbst probieren.
dedlfix.