php5 simple_xml_file ayrıştırma hatası

2 Cevap php

Ben php fonksiyon simplexml_load_file kullanarak ilk etapta, aşağıdaki XML kodu geçmek için çalışıyorum. Aşağıdaki gibi şu anda php kod son derece basittir:

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

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

Ancak bu dosyayı çalıştıran öncelikle URI PostcodeAnywhere mutlak olmayan bir ayrıştırma hatası veriyor. Sonuçta komut dosyası hatası 'dize XML olarak ayrıştırıldı olamazdı' atar.

XML dosyası kendini doğrulamak için görünüyor ve herhangi bir hata görünmüyor.

<?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>

2 Cevap

SimpleXML Bu geçersiz ad beyannamesinde boğulma. Eğer kaynak XML kontrol edebilirim? Eğer öyleyse, ad kaldırmak veya bir URN kullanmak için bunu çözebilirsiniz. Aksi takdirde, kötü ad görmezden libxml bir seçenek olabilir?

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

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

Edit: bana bu değişiklik izin, SimpleXML değil choking, bu sadece yüksek sesle kendi boğazını temizledi. Sen Uyarılar bir demet olsun ama, hepsi bir SimpleXMLElement yarattı ve ben ne görebiliyordu çalışmak gibi görünüyor. Eğer kaynak XML tamir edemez ve uyarılar sizi rahatsız ediyorsa, sadece bu yüzden gibi, yükleme sırasında hata bildirimini kapatabilirsiniz:

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

Bilmiyorum, XML (belki ama, <? ?> beyanı kaldırmak gerekir.) Gayet iyi görünüyor, genel bir kural olarak, XML ayrıştırıcı kendisi neyin yanlış olduğunu söylemek de çok ayrıntılı.

Parser'ın hataları almak için, Ya