Parser ce fichier xml un peu particulier

Mammouth du PHP | 737 Messages

11 avr. 2012, 12:25

Bonjour,

Pouvez-vous m'aider svp ?

Voici la donne, un champ dans la base de mon appli contient ceci :

<?xml version="1.0" encoding="utf-8"?>
<section xmlns:image="http://ez.no/namespaces/ezpublish3/image/" xmlns:xhtml="http://ez.no/namespaces/ezpublish3/xhtml/" xmlns:custom="http://ez.no/namespaces/ezpublish3/custom/">
<paragraph xmlns:tmp="http://ez.no/namespaces/ezpublish3/temporary/">
<literal>info 1</literal>
<literal>info 2</literal>
<literal>info 3</literal>
<literal>info 4</literal>
<literal>info 5...</literal>
</paragraph>
</section>

Je cherche le moyen de ressortir proprement les info 1, info 2, info 3...et ne sais pas vers quelle méthode en php5 me tourner.

Par avance merci.

Mega
;)
Dyslexics are teople poo

Eléphant du PHP | 110 Messages

11 avr. 2012, 15:17

Bonjour,

J'ai ça en stock :
function objectsIntoArray($arrObjData, $arrSkipIndices = array())
{
    $arrData = array();
  
    if (is_object($arrObjData)) {
        $arrObjData = get_object_vars($arrObjData);
    }
   
    if (is_array($arrObjData)) {
        foreach ($arrObjData as $index => $value) {
            if (is_object($value) || is_array($value)) {
                $value = objectsIntoArray($value, $arrSkipIndices); 
            }
            if (in_array($index, $arrSkipIndices)) {
                continue;
            }
            $arrData[$index] = $value;
        }
    }
    return $arrData;
}

$xmlUrl = "LINK";
$xmlStr = file_get_contents($xmlUrl);
$xmlObj = simplexml_load_string($xmlStr);
$result = objectsIntoArray($xmlObj);

Mammouth du PHP | 737 Messages

11 avr. 2012, 15:45

Merci binboum.

J'ai implémenté mais je n'ai pas de valeur, mais pas d'erreur pour autant.

Concernant le xml il est en base et quand je fais ceci :

$xml = $rows["contenu"];
echo $xml;

C'est ainsi que j'ai pu obtenir le

Code : Tout sélectionner

<section xmlns:image="http://ez.no/namespaces/ezpublish3/image/" xmlns:xhtml="http://ez.no/namespaces/ezpublish3/xhtml/" xmlns:custom="http://ez.no/namespaces/ezpublish3/custom/"> <paragraph xmlns:tmp="http://ez.no/namespaces/ezpublish3/temporary/"> <literal>info 1</literal> <literal>info 2</literal> <literal>info 3</literal> <literal>info 4</literal> <literal>info 5...</literal> </paragraph> </section>
J'ai essayé de partir de ce tuto : http://www.siteduzero.com/tutoriel-3-34 ... zcode.html, en vain. Pourtant, ma progression semble logique...
		$xml = $rows["contenu"];
		//echo $xml;
		$document_xml = new DomDocument();
		$document_xml->loadXML($xml);
		$grandpere = $document_xml->getElementsByTagName('section');
		$pere = $grandpere->getElementsByTagName('paragraph');
		$fils = $pere->getElementsByTagName('literal');
Right ?

Mega
;)
Dyslexics are teople poo

Eléphant du PHP | 110 Messages

11 avr. 2012, 16:32

Ton XML il n'a pas d'erreurs quand tu le tapes dans ta barre d'url ?

Mammouth du PHP | 737 Messages

12 avr. 2012, 10:09

Bonjour,

Non pas d'erreurs.

J'ai réussi à parser en local comme ceci (si ca peut aider) :
$document_xml = new DomDocument();
$document_xml->loadXML($xml);
$grandpere = $document_xml->getElementsByTagName('section');
$pere = $document_xml->getElementsByTagName('paragraph');
$enfants = $document_xml->getElementsByTagName('literal');
$uno = $enfants->item(0);
$dos = $enfants->item(1);
$tres = $enfants->item(2);
$quatro = $enfants->item(3);
echo '<h1>'.$uno->nodeValue."</h1><h2>".$dos->nodeValue."</h2><h3>".$tres->nodeValue."</h3><h4>".$quatro->nodeValue."</h4>";
Par contre dans mon autre environnement, ça ne fonctionne pas, c'est zarbi...

Mega
;)
Dyslexics are teople poo

Mammouth du PHP | 737 Messages

12 avr. 2012, 12:25

J'ai résolu mon problème d'une façon moyennement propre mais je voyais pas comment faire et ne crois pouvoir faire autrement.

A vous de me dire (je reste preneur même si ça marche)

Le xml en base pour le même type d'info se présentait différemment suivant les cas, en clair pas de xml identique. Pour faire un parsage au niveau noeud c'est pas top je trouve.

J'ai donc réuni les dénominateurs comment et abusé de la fonction str_replace.

PHPïquement,

Mega
;)
Dyslexics are teople poo