Après avoir dépensé PLUSIEURS heures frustrées à ce sujet, je demande votre aide. J'essaie d'obtenir le contenu de nœuds particuliers à partir d'une réponse SOAP.Réponses SOX de SimpleXML Problèmes d'espace de noms
La réponse est
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="<a href="http://www.w3.org/2003/05/soap-envelope">http://www.w3.org/2003/05/soap-envelope</a>"<xmlns:ns1="<a href="http://soap.xxxxxx.co.uk/">http://soap.xxxxxx.co.uk/</a>">
<env:Body>
<ns1:PlaceOrderResponse>
<xxxxxOrderNumber></xxxxxOrderNumber>
<ErrorArray>
<Error>
<ErrorCode>24</ErrorCode>
<ErrorText>The+client+order+number+3002254+is+already+in+use</ErrorText>
</Error>
<Error>
<ErrorCode>1</ErrorCode>
<ErrorText>Aborting</ErrorText>
</Error>
</ErrorArray>
</ns1:PlaceOrderResponse>
</env:Body>
</env:Envelope>
Je suis en train de faire les nœuds et les enfants de < ErrorArray>. En raison des espaces de noms contenant XML
$XmlArray = new SimpleXMLElement($XmlStr);
foreach ($XmlArray->env:Envelope->env:Body->ns1:PlaceOrderResponse->ErrorArray->Error as $Error)
{
echo $Error->ErrorCode."<br />";
}
ne fonctionne pas. J'ai lu un certain nombre d'articles tels que
- http://www.sitepoint.com/blogs/2005/10/20/simplexml-and-namespaces/
- http://blog.stuartherbert.com/php/2007/01/07/using-simplexml-to-parse-rss-feeds/
et environ 20 questions sur ce site, qui ne sont pas aider malheureusement.
Même l'écriture,
$XmlArray = new SimpleXMLElement($XmlStr);
echo "<br /><br /><pre>\n";
print_r($XmlArray);
echo "<pre><br /><br />\n";
donne
SimpleXMLElement Object
(
)
qui me fait me demande si la réponse du savon (XmlStr $) est en fait une entrée valable pour SimpleXMLElement.
Il semble que la ligne
$XmlArray = new SimpleXMLElement($XmlStr);
ne fait pas ce que je pense à.
Toute aide sur la façon d'obtenir les nœuds à partir du XML ci-dessus serait la bienvenue. De toute évidence, le faire fonctionner (avoir un exemple de travail) est ce dont j'ai besoin à court terme, mais si quelqu'un pouvait m'aider à comprendre ce que je fais de mal serait mieux à long terme.
Cheers. Stu
MERCI !, je suis si proche. J'avais déjà regardé dans la méthode children() et utilisais ce foreach ($ XmlArray-> enfants ('env', true) -> Enveloppe-> enfants ('env', true) -> Corps- > enfants ('ns1', true) -> PlaceOrderResponse-> ErrorArray-> Erreur en $ Error) Encore une fois, merci :-) Ps quelles sont les balises pour formater correctement le code sur stackoverflow? Je ne pouvais pas le trouver sur le côté. – Stu
@Stu Il vous suffit d'appuyer sur le bouton 0101 avec votre code sélectionné. En passant, si la réponse était vraiment satisfaisante, vous devriez l'accepter. – Artefacto