Page 1 sur 1

SimpleXML_load_String et XML String

Posté : 07 juin 2014, 18:58
par galerien
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);
?>


Re: SimpleXML_load_String et XML String

Posté : 07 juin 2014, 23:45
par moogli
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.


@+

Re: SimpleXML_load_String et XML String

Posté : 13 juin 2014, 15:19
par galerien
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.

Re: [RESOLU] SimpleXML_load_String et XML String

Posté : 13 juin 2014, 15:35
par telnes

Re: [RESOLU] SimpleXML_load_String et XML String

Posté : 13 juin 2014, 15:56
par galerien
Réellement très interressant.

Merci.