Ich versuche derzeit, etwas Java-Code in PHP neu zu erstellen. Der Code erstellt XML aus einem bestimmten Objekt und sendet XML-Anforderungen an ein Back-End. Das Backend liefert die Antwort. Jetzt möchte ich die XML-Antwort in einem PHP-Objekt einer bestimmten komplexen Klasse konvertieren. Ich habe SimpleXml verwendet, um die Zeichenfolge in die Klasse XmlResponse zu konvertieren, aber ich kann nur auf den Getter und Setter von der XmlResponse-Klasse und nicht auf die andere Klasse innerhalb der XmlResponse-Klasse zugreifen. In Java verwende ich einfach JAXB, aber ich bin mir nicht sicher, ob so etwas möglich ist. Das Problem ist, dass sich das Daten-Tag von Anfrage zu Anfrage ändern kann und je nach Anfrage andere Objekte liefert!PHP XML String zu komplexen PHP Class
ich das folgende Setup verwenden:
PHP 5.6 oder 7
Zend 2 oder 3
Grüße!
Am Ende möchte ich etwas wie folgt aus:
<?php
$responseObject = convertStringToObject($responseString, XMLResponse::class);
$result = $responseObject->getResult();
$data = $responseObject->getResult()->getData();
$status = $responseObject->getResult()->getStatus();
$user = $responseObject->getResult()->getData()->getUser()
?>
Die Antwort sieht wie folgt aus:
<response>
<transaction_id>1234</transaction_id>
<result>
<status>
<code>1</code>
<msg>Success</msg>
</status>
<data>
<user>
<fname>Jon</lname>
<lname>Doe</lname>
<birthday>1986-08-01 00:00:00</birthday>
</user>
</data>
</result>
</response>
Jetzt habe ich die folgenden Klassen in PHP.
XMLResponse
class XmlResponse {
public $result; #XmlResult Class
public $transaction_id; #string
public function getArrayCopy() {
return get_object_vars($this);
}
//getter + setter
}
XmlResult
class XmlResult {
public $data; #XmlData Class
public $status; #XmlStatus Class
public function getArrayCopy() {
return get_object_vars($this);
}
//getter + setter
}
XmlStatus
class XmlStatus {
public $code; #string
public $msg; #string
public function getArrayCopy() {
return get_object_vars($this);
}
//getter + setter
}
XmlData
class XmlData {
public $user; #User Class
public $car; #Car Class
public $member; #Member Class
public $foo; #Foo Class
public function getArrayCopy() {
return get_object_vars($this);
}
//getter + setter
}
Benutzer
class User {
public $fname; #string
public $lname; #string
public $birthday; #string
public function getArrayCopy() {
return get_object_vars($this);
}
//getter + setter
}
Haben Sie überlegt, xpath zu verwenden, um Ihre XML abzufragen? -> http://php.net/manual/de/simplexmlelement.xpath.php – Crisp