Existe-t-il un moyen facile d'analyser cette réponse texte et serveur XML avec PHP?
-
29-10-2019 - |
Question
J'utilise PHP et comme cette réponse de serveur n'est pas du XML pur, j'ai du mal à essayer de transformer les réponses en variables / tableaux à utiliser.
Je ne suis préoccupé que par la variable contenue dans l'arbre XML. Il peut y avoir plusieurs conteneurs (comme) et la quantité varie également en quantité. Il pourrait aussi me "nicher" avec les divers aussi (je crois).
Exemple de réponse du serveur:
HTTP/1.1 200 OK
Date: Wed, 07 Dec 2011 01:02:01 GMT
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e DAV/2 PHP/5.2.17
X-Powered-By: PHP/5.2.17
Cache-Control: no-store, no-cache, no-transform, must-revalidate, private
Expires: 0
Vary: Accept-Encoding,User-Agent
Content-Length: 90
Connection: close
Content-Type: text/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<var1>AAA</var1>
<var2>BBB</var2>
<var3>CCC</var3>
</response>
Merci.
La solution
function xml2array($xml) {
$xmlary = array();
$reels = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s';
$reattrs = '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/';
preg_match_all($reels, $xml, $elements);
foreach ($elements[1] as $ie => $xx) {
$xmlary[$ie]["name"] = $elements[1][$ie];
if ($attributes = trim($elements[2][$ie])) {
preg_match_all($reattrs, $attributes, $att);
foreach ($att[1] as $ia => $xx)
$xmlary[$ie]["attributes"][$att[1][$ia]] = $att[2][$ia];
}
$cdend = strpos($elements[3][$ie], "<");
if ($cdend > 0) {
$xmlary[$ie]["text"] = substr($elements[3][$ie], 0, $cdend - 1);
}
if (preg_match($reels, $elements[3][$ie]))
$xmlary[$ie]["elements"] = xml2array($elements[3][$ie]);
else if ($elements[3][$ie]) {
$xmlary[$ie]["text"] = $elements[3][$ie];
}
}
return $xmlary;
}
Autres conseils
Vous pouvez faire quelque chose comme ça en utilisant strstr();
$h = 'HTTP/1.1 200 OK
Date: Wed, 07 Dec 2011 01:02:01 GMT
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e DAV/2 PHP/5.2.17
X-Powered-By: PHP/5.2.17
Cache-Control: no-store, no-cache, no-transform, must-revalidate, private
Expires: 0
Vary: Accept-Encoding,User-Agent
Content-Length: 90
Connection: close
Content-Type: text/xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<var1>AAA</var1>
<var2>BBB</var2>
<var3>CCC</var3>
</response>';
print_r(strstr($h, "<?xml"));
// or this even strstr($h, '<?xml version="1.0" encoding="UTF-8"?>'
Cela vous donnerait le RAW XML renvoyé.
<?xml version="1.0" encoding="UTF-8"?>
<response>
<var1>AAA</var1>
<var2>BBB</var2>
<var3>CCC</var3>
</response>
Si vous utilisez PHP 5, utilisez la bibliothèque simplexml pour créer un objet à partir d'une chaîne XML.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow