2010-01-27 7 views
0

J'essaie de transmettre le code XML ci-dessous, en utilisant en premier lieu la fonction php simplexml_load_file. Actuellement, le code php est incroyablement simple comme suit:php5 simple_xml_file erreur d'analyse

if (file_exists('test.xml')) { 
    $xml = simplexml_load_file('test.xml'); 

    print_r($xml); 
} else { 
    exit('Failed to open test.xml.'); 
} 

Cependant sur l'exécution de ce fichier, il donne d'abord une erreur d'analyse que l'URI PostcodeAnywhere n'est pas absolue. En fin de compte, le script renvoie l'erreur "La chaîne n'a pas pu être analysée en XML".

Le fichier XML lui-même semble valider et ne montre aucune erreur.

<?xml version="1.0" encoding="utf-8"?> 
<DataSet xmlns="PostcodeAnywhere"> 
    <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="Table1"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="Id" type="xs:string" minOccurs="0" /> 
       <xs:element name="Name" type="xs:string" minOccurs="0" /> 
       <xs:element name="Items" type="xs:string" minOccurs="0" /> 
       <xs:element name="BillingModel" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    </xs:schema> 
    <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
    <NewDataSet xmlns=""> 
     <Table1 diffgr:id="Table11" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
     <Id>3898</Id> 
     <Name>DIA Members</Name> 
     <Items /> 
     <BillingModel>PREPAID</BillingModel> 
     </Table1> 
    </NewDataSet> 
    </diffgr:diffgram> 
</DataSet> 

Répondre

0

SimpleXML est en train de s'étouffer avec cette déclaration d'espace de noms invalide. Contrôlez-vous le code source XML? Si c'est le cas, vous pouvez supprimer l'espace de noms ou le réparer pour utiliser un URN. Sinon, il pourrait y avoir une option dans libxml pour ignorer les mauvais espaces de noms?

<!-- no namespace --> 
<DataSet> 

<!-- URN --> 
<DataSet xmlns="urn:PostcodeAnywhere"> 

Edit: permettez-moi de modifier cette, SimpleXML n'est pas étouffement, il est éclaircissait simplement la gorge bruyamment. Vous obtenez un tas d'avertissements mais c'est tout, un SimpleXMLElement est créé et semble fonctionner à partir de ce que je pouvais voir. Si vous ne parvenez pas à corriger le code source et que les avertissements vous dérangent, vous pouvez simplement désactiver le rapport d'erreurs pendant le chargement, comme ceci:

libxml_use_internal_errors(false); 
$xml = simplexml_load_file('test.xml'); 
libxml_use_internal_errors(false); 
+0

En regardant cela, vous avez raison. Un grand merci pour l'aide. – simnom

0

Je ne sais pas, votre XML semble bien (vous devez peut-être supprimer la déclaration <? ?>, cependant.) En règle générale, l'analyseur XML lui-même est très détaillé en dire ce qui ne va pas.

Pour obtenir les erreurs de l'analyseur, vous pouvez