2014-06-12 3 views
0

J'ai trouvé beaucoup de solutions pour ce problème, mais mon code ne fonctionnera pas!Analyse XML avec des informations d'espace de noms

INFO XML:

<?xml version="1.0" encoding="UTF-8"?> 
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
     <S:Body> 
      <ns2:resultado xmlns:ns2="http://webservice.consulta.spcjava.spcbrasil.org/" data="2014-06-03T11:37:32.001-03:00" restricao="false"> 
      <protocolo digito="2" numero="1204248496" /> 
      .... other XML info 

MON CODE:

$s = '<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:resultado xmlns:ns2="http://webservice.consulta.spcjava.spcbrasil.org/" data="2014-06-03T11:37:32.001-03:00" restricao="false"><protocolo digito="2" numero="1204248496" /> ... 

$xml = simplexml_load_string($s); 

$x2 = $xml->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://webservice.consulta.spcjava.spcbrasil.org/')->resultado->protocolo->digito; 

print_r($x2); 
var_dump(count($x2)); 

Retours nul et 0 pour le nombre d'objets.

J'ai suivi ce tutoriel: http://amigotechnotes.wordpress.com/2013/11/16/parse-xml-with-namespace-by-simplexml-in-php/

Je ne comprends pas où mon exemple diffère de son exemple. :/

Quelqu'un peut-il m'aider avec ce problème, s'il vous plaît?

Répondre

0

Enfin, cela a fonctionné en utilisant une autre syntaxe.

$xml = simplexml_load_string($resultadoDocumento[0]["cdo_xml"]); 
$resultadoSPC = $xml->children('S', TRUE)->Body->children('ns2', TRUE)->children(); 

accès aux nœuds par:

<?php foreach ($resultadoSPC->consumidor->children()->{"consumidor-pessoa-fisica"} as $consumidorElement) : ?> 
<?php echo $consumidorElement->attributes()->{"nome"}; ?> 
+1

Si vous avez à travailler avec les préfixes, créez une deuxième variante avec les URIs car préfixes peuvent changer, non. URIs Pour votre exemple, ils devraient fonctionner de manière interchangeable, donc le code dans votre réponse * n'est pas techniquement différent * de votre question. Donc, la question contenait déjà la réponse, ce qui signifie que votre réponse (dans ce sens) n'est pas une vraie réponse. Vous devriez mieux préciser à quelle analyse concrète vous êtes arrivé à quelle était la cause première de votre problème. – hakre

+0

Merci pour les conseils @hakre. Je vais accepter la réponse parce que l'utilisation de cette syntaxe l'a fait fonctionner, ce qui m'a aidé quand j'avais besoin de travailler. D'autres questions et exemples différaient de ma structure XML, et comme je suis un débutant utilisant des fichiers XML, l'utilisation d'une structure similaire m'aiderait à résoudre mon problème dès que possible. J'espère que ça aide quelqu'un d'autre. –