I'm trying to compare two SimpleXML Objects
.
One is fetched from DB and the other one from a XML API, but the result is always false, whether the XML are in fact identical or not.
What am I doing wrong?
$objDbXml = simplexml_load_string($objReisen->xml); // XML from DB
$objApiXml = simplexml_load_string(getXMlFromApi()); // XML from Api
var_dump($objDbXml->Reise->Z_LEISTUNGEN == $objApiXml->Reise->Z_LEISTUNGEN);
// Result is always false
The output of var_dump($objDbXml->Reise->Z_LEISTUNGEN , $objApiXml->Reise->Z_LEISTUNGEN):
object(SimpleXMLElement) #69 (1) {
["TextLine"]= > array(11) {
[0] = > string(43) "Erlebnisreise mit höchstens 13 Teilnehmern"
[1] = > string(39) "Durchführungsgarantie ab 4 Teilnehmern"
[2] = > string(127) "Linienflug mit South African Airways von Frankfurt a.M. nach Kapstadt und zurück von Port Elizabeth (von München auf Anfrage)"
[3] = > string(28) "Reiseminibus mit Klimaanlage"
[4] = > string(111) "Übernachtungen in Hotels und Lodges sowie 2 Übernachtungen in einer exklusiven Lodge im Kariega Game Reserve"
[5] = > string(67) "Täglich Frühstück, 2 x Mittagessen, 4 x Abendessen, 1 Weinprobe"
[6] = > string(123) "1 Safari im Addo-Elephant-NP; 2 Safaris im offenen Geländewagen, 1 Wandersafari und 1 Bootsfahrt im Kariega Game Reserve"
[7] = > string(41) "Nationalparkgebühren und Eintrittsgelder"
[8] = > string(14) "Reiseliteratur"
[9] = > string(43) "Zertifikat über 100 m² Regenwald für Sie"
[10] = > string(42) "Deutsch sprechende Chamäleon-Reiseleitung"
}
}
object(SimpleXMLElement) #67 (1) {
["TextLine"]= > array(11)
{
[0] = > string(43) "Erlebnisreise mit höchstens 12 Teilnehmern"
[1] = > string(39) "Durchführungsgarantie ab 4 Teilnehmern"
[2] = > string(127) "Linienflug mit South African Airways von Frankfurt a.M. nach Kapstadt und zurück von Port Elizabeth (von München auf Anfrage)"
[3] = > string(28) "Reiseminibus mit Klimaanlage"
[4] = > string(111) "Übernachtungen in Hotels und Lodges sowie 2 Übernachtungen in einer exklusiven Lodge im Kariega Game Reserve"
[5] = > string(67) "Täglich Frühstück, 2 x Mittagessen, 4 x Abendessen, 1 Weinprobe"
[6] = > string(123) "1 Safari im Addo-Elephant-NP; 2 Safaris im offenen Geländewagen, 1 Wandersafari und 1 Bootsfahrt im Kariega Game Reserve"
[7] = > string(41) "Nationalparkgebühren und Eintrittsgelder"
[8] = > string(14) "Reiseliteratur"
[9] = > string(43) "Zertifikat über 100 m² Regenwald für Sie"
[10] = > string(42) "Deutsch sprechende Chamäleon-Reiseleitung"
}
}
SimpleXML is an extension that allows us to easily manipulate and get XML data. SimpleXML provides an easy way of getting an element's name, attributes and textual content if you know the XML document's structure or layout.
Example #2 Create a SimpleXMLElement object from a URL$sxe = new SimpleXMLElement('http://example.org/document.xml', NULL, TRUE); echo $sxe->asXML();
The way to change the value of an attribute, is to change its text value. This can be done using the setAttribute() method or setting the nodeValue property of the attribute node.
The problem here, as so often with SimpleXML, is in the fact that a SimpleXMLElement is not a "normal" PHP object. SimpleXML is not a parser which spits out fully-formed PHP objects with properties and methods, but a "live" API linked to an internal representation of an XML document.
The manual page on Comparing Objects states that "Two object instances are equal if they have the same attributes and values, and are instances of the same class." When you run print_r()
or var_dump()
over a SimpleXMLElement it appears to have properties representing the child nodes and attributes, which would be the same for two objects built from identical XML. However, the actual implementation contains only a pointer into a memory structure created when the XML was parsed, which will be different even if you parse the same string twice. Thus simply comparing two SimpleXMLElement objects with ==
will never return true
.
The actual solution depends on what exactly you want to compare:
->asXML()
to get an XML string for that part of the document; e.g. $objDbXml->Reise->Z_LEISTUNGEN->asXML() == $objApiXml->Reise->Z_LEISTUNGEN->asXML()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With