[RESOLU] SimpleXML_load_String et XML String

Petit nouveau ! | 5 Messages

07 juin 2014, 18:58

Bonjour,

Débutant en XML, je ne comprends pas pourquoi lorsque j'utilise la fonction simplexml_load_string, celle-ci me retourne un objet vide et aucune erreur.

La librairie XML est bien chargé et mon PHP est 5.5.11.

libxml =>
libXML support active
libXML Compiled Version 2.9.1
libXML Loaded Version 20901
libXML streams enabled

Je suis preneur de toute explication/solution pour que mon code fonctionne.

Le code que j'utilise pour les tests. Le XML est un XML exemple des données que je cherche à traiter.
<?php
libxml_use_internal_errors(TRUE);
$a = <<<XML
<upd:Update xmlns:pub="http://schemas.microsoft.com/msus/2002/12/Publishing" xmlns:bar="http://schemas.microsoft.com/msus/2002/12/BaseApplicabilityRules" xmlns:upd="http://schemas.microsoft.com/msus/2002/12/Update">
    <upd:UpdateIdentity UpdateID="002370d7-f7be-4701-b9fe-85e2092c1b85" RevisionNumber="100" />
    <upd:Properties DefaultPropertiesLanguage="en" UpdateType="Detectoid" ExplicitlyDeployable="false" IsPublic="false" DetectoidType="Application Locale" PublicationState="Published" CreationDate="2008-01-30T09:37:13.074Z" PublisherID="377c55d0-1cd2-4b33-a783-07ba418bb7fe"></upd:Properties>
    <upd:LocalizedPropertiesCollection>
        <upd:LocalizedProperties>
            <upd:Language>en</upd:Language>
            <upd:Title>SCCM 2007 ENU</upd:Title>
            <upd:Description>It is the detectoid that decides if the site server is English version.</upd:Description>
        </upd:LocalizedProperties>
    </upd:LocalizedPropertiesCollection>
    <upd:Relationships>
        <upd:Prerequisites>
            <upd:UpdateIdentity UpdateID="d22b3d16-bc75-418f-b648-e5f3d32490ee" />
        </upd:Prerequisites>
    </upd:Relationships>
    <upd:ApplicabilityRules>
        <upd:IsInstalled>
            <bar:RegSz Key="HKEY_LOCAL_MACHINE" Subkey="Software\Microsoft\SMS\Identification" Value="Language" Comparison="EqualTo" Data="English:00000409" RegType32="true" xmlns:bar="http://schemas.microsoft.com/msus/2002/12/BaseApplicabilityRules" />
        </upd:IsInstalled>
    </upd:ApplicabilityRules>
</upd:Update>
XML;

$xml=  simplexml_load_string($a);

print_r(libxml_get_errors());
print_r($xml);
?>


Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 juin 2014, 23:45

salut,

le problème est du aux espaces de noms.

si tu les enlèves tu n'auras pas de problème. (je ne sais pas pourquoi mais les espaces de nom ne sont pas utilisable...).

pour le voir correctement met en commentaire la première ligne (libxml_use_internal_errors(true);) tu auras les messages d'erreurs manquant.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

13 juin 2014, 15:19

J'ai résolu mon problème .

Avec Xpath, cela fonctionne correctement si on utilise une commande du type $xml->xpath('/upd:Update/upd:Properties/@UpdateType')['0'] ->__toString().

Par contre, que l'on fasse une erreur dans la commande ou non, simple_xml ne me retournait aucune erreur => Pas facile de trouver l'erreur comme cela.

Par contre, que ce soit print_r, var_dump, ... je n'obtiens aucun affichage hormis un object simple_xml qui semble vide, d'ou mon problème pour le débuggage et la compréhension de mon erreur.

Réellement étrange que xpath retrouve le chemin mais qu'il soit impossible d'afficher l'object simple_xml.

Merci quand même.

Eléphant du PHP | 422 Messages

13 juin 2014, 15:35

toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Petit nouveau ! | 5 Messages

13 juin 2014, 15:56

Réellement très interressant.

Merci.