SimpleXML hataları kaçmak

2 Cevap php
 <!-- MEMCACHE empty -->

Şimdi ben uzaktan erişim çalışıyorum XML dosyalarının üstünde yer alır gibi şimdi yukarıda bir komut dosyası için sorunlar neden oluyor. SimpleXML XML dosya artık düzgün biçimli gerçeği sevmez. Ben hataları kaçan çalıştı ama bu hile yapmak değildi. Herkes bu çözmek için nasıl yönde beni işaret edebilir?

2 Cevap

Sürece XML dosyası iyi oluşmuş değil gibi, SimpleXML sen SimpleXML beslemeden önce bu XML dosyasında bazı dize işlemleri yapmak gerekebilir, yük ... Bu yüzden olmaz.

Bu "MEMCACHE boş" şey her zaman aynı ise str_replace dayalı oldukça basit bir şey yapmak olabilir; Başka bazı regex muhtemelen hile yapacak ;-)

Yani:

Belki de gerçekten "temiz" değil ... Ama çalışması gerektiğini, hızlı ve basit ...


For instance, if your non-XML looks like this :

$xml_string = <<<XML
&lt;!-- MEMCACHE empty --&gt;
<?xml version="1.0" ?>
<data>
    <glop>TEST</glop>
    <other>GLOP</other>
</data>
XML;

Bunu kullanmak isteyebilirsiniz:

$real_xml_string = str_replace("&lt;!-- MEMCACHE empty --&gt;\n", '', $xml_string);

Note the "\n "sonunda: Eğer ;-) o satırsonunu kaldırmak gerekir

Hangi size içeren bir dize verir:

<?xml version="1.0" ?>
<data>
    <glop>TEST</glop>
    <other>GLOP</other>
</data>

Hangi iyi biçimlendirilmiş XML; bu yüzden şimdi yükleyebilirsiniz:

$xml = simplexml_load_string($real_xml_string);
var_dump($xml);

Ve ne istediğini olsun:

object(SimpleXMLElement)[1]
  public 'glop' => string 'TEST' (length=4)
  public 'other' => string 'GLOP' (length=4)


If the "status" in the MEMCACHE thing is not always "empty", you might use some regex ; something like this, I guess, might do, instead of the str_replace call :

$real_xml_string = preg_replace("#&lt;!-- MEMCACHE (\w+) --&gt;\n#", '', $xml_string);

(Might need to be adapted a bit, depending on your needs)


Of course, in your case, $xml_string would not be stored in the source code, but obtained via something like curl or file_get_contents, I suppose.

Bu gibi dosya çok üstünde ise

&lt;!-- MEMCACHE empty --&gt;
<?xml version="1.0" ?>
<root> ... </root>

Sonra yapılacak en iyi şey, empty veya null için preg_replace("/^&lt;!-- MEMCACHE empty --&gt;$/", "", $xml_file) buna olacağını düşünüyorum.

<?xml version="1.0" ?> o, DOM, SAX, SimpleXML ya da başka herhangi bir durumda geçerli XML olması için dosyanın ilk satırı olması gerekiyor, çünkü budur.