2009-08-13 3 views
0
<!-- MEMCACHE empty --> 

私はリモートアクセスしようとしているXMLファイルの最上部に配置されているため、上記のようになっています。 simpleXMLは、XMLファイルがもはや整形式でないという事実を好まない。私はエラーをエスケープしようとしましたが、それはトリックを行うように見えませんでした。誰かがこれを解決する方法の方向に私を指摘することはできますか?エスケープシンプルXMLエラー

答えて

1

XMLファイルが正常に整形されていない限り、SimpleXMLはそれをロードしません。そのため、XMLファイルに文字列操作を行う必要があります。

この「MEMCACHE空」のものが常に同じ場合は、str_replaceに基づいて非常に簡単なことがあります。

  • simplexml_load_string
  • にその文字列を与える
  • が始まり
  • で事を抑制する文字列にリモートファイルを取得:他に、いくつかの正規表現は、おそらくトリック;-)だから、

    を行います

多分それは本当に "クリーン"ではない...しかし、動作する必要があります、速く、簡単です...例えば


あなたの非XMLは次のようになります場合、:

$real_xml_string = str_replace("<!-- MEMCACHE empty -->\n", '', $xml_string); 

注末尾に "\n":あなた

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

あなたはこれを使用する場合がありますその改行を削除する必要があります;-)

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

いずれも整形式のXMLです。

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

そして、あなたは、あなたが望むものを得る:あなたは今、それを読み込むことができます

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


「ステータスが」MEMCACHEの事は常に「空」でないで場合、あなたには、いくつかを使用する可能性があります正規表現。あなたには、

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

(あなたのニーズに応じて、ビットを適応させることが必要になる場合があります)もちろん


:このような何かが、私は推測し、代わりにstr_replaceコールで、行う可能性がありますケースでは、$xml_stringはソースコードには格納されませんが、curlやfile_get_contentsのようなものを介して取得されます。

+0

すぐに対応すること。ありがとう!私が変更を加えた後、彼らはmemcacheを無効にしました。 Go figure。 – Eric

+0

あなたは大歓迎です:-) ;;問題が解決した後のmemcachedの無効化についての不運:-D –

0

それは

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

のように、ファイルの最上部にならそれから私は行うための最善のことは、それがまたはヌルpreg_replace("/^&lt;!-- MEMCACHE empty --&gt;$/", "", $xml_file)になると思います。

<?xml version="1.0" ?>は、DOM、SAX、SimpleXMLなどのいずれの場合でも有効なXMLであるためにはファイルの最初の行にする必要があるからです。