Page 1 sur 1

Parser ce fichier xml un peu particulier

Posté : 11 avr. 2012, 12:25
par Megadeth
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
;)

Re: Parser ce fichier xml un peu particulier

Posté : 11 avr. 2012, 15:17
par binboum
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);

Re: Parser ce fichier xml un peu particulier

Posté : 11 avr. 2012, 15:45
par Megadeth
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
;)

Re: Parser ce fichier xml un peu particulier

Posté : 11 avr. 2012, 16:32
par binboum
Ton XML il n'a pas d'erreurs quand tu le tapes dans ta barre d'url ?

Re: Parser ce fichier xml un peu particulier

Posté : 12 avr. 2012, 10:09
par Megadeth
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
;)

Re: Parser ce fichier xml un peu particulier

Posté : 12 avr. 2012, 12:25
par Megadeth
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
;)