2011-12-07 8 views
0

私はPHPを使用しています。このサーバーの応答は純粋なXMLではないので、レスポンスを変数/配列に変換して使用するのに苦労しています。このテキストとPHPのPHPレスポンスを簡単に解析する方法はありますか?

私は、XMLツリーに含まれる変数にのみ関心があります。 複数のコンテナ(のような)があり、その数量も異なります。また私は、さまざまなものと一緒に「入れ子になって」いるかもしれません(私は信じています)。

サーバー応答例:

HTTP/1.1 200 OK 
Date: Wed, 07 Dec 2011 01:02:01 GMT 
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e DAV/2 PHP/5.2.17 
X-Powered-By: PHP/5.2.17 
Cache-Control: no-store, no-cache, no-transform, must-revalidate, private 
Expires: 0 
Vary: Accept-Encoding,User-Agent 
Content-Length: 90 
Connection: close 
Content-Type: text/xml 

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <var1>AAA</var1> 
    <var2>BBB</var2> 
    <var3>CCC</var3> 
</response> 

感謝。

答えて

1
function xml2array($xml) { 
    $xmlary = array(); 

    $reels = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s'; 
    $reattrs = '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/'; 

    preg_match_all($reels, $xml, $elements); 

    foreach ($elements[1] as $ie => $xx) { 
     $xmlary[$ie]["name"] = $elements[1][$ie]; 

     if ($attributes = trim($elements[2][$ie])) { 
      preg_match_all($reattrs, $attributes, $att); 
      foreach ($att[1] as $ia => $xx) 
       $xmlary[$ie]["attributes"][$att[1][$ia]] = $att[2][$ia]; 
     } 

     $cdend = strpos($elements[3][$ie], "<"); 
     if ($cdend > 0) { 
      $xmlary[$ie]["text"] = substr($elements[3][$ie], 0, $cdend - 1); 
     } 

     if (preg_match($reels, $elements[3][$ie])) 
      $xmlary[$ie]["elements"] = xml2array($elements[3][$ie]); 
     else if ($elements[3][$ie]) { 
      $xmlary[$ie]["text"] = $elements[3][$ie]; 
     } 
    } 

    return $xmlary; 
} 
+0

WORKED !!!ありがとうございました!!!それは間違いなく私に働くことができる何かを私に与える! – Rob

+0

コードを説明できますか? 「要素」パラメータとは何ですか?提供されていない場合、xmlaryは空の配列ではありません。 – Ebpo

+0

@Ebpo ['preg_match_all'](http://php.net/manual/en/function.preg-match-all.php)のドキュメントをご覧ください。関数は '$ elements'にマッチの配列を設定します。 –

0

あなたはstrstr();

$h = 'HTTP/1.1 200 OK 
Date: Wed, 07 Dec 2011 01:02:01 GMT 
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e DAV/2 PHP/5.2.17 
X-Powered-By: PHP/5.2.17 
Cache-Control: no-store, no-cache, no-transform, must-revalidate, private 
Expires: 0 
Vary: Accept-Encoding,User-Agent 
Content-Length: 90 
Connection: close 
Content-Type: text/xml 

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <var1>AAA</var1> 
    <var2>BBB</var2> 
    <var3>CCC</var3> 
</response>'; 

print_r(strstr($h, "<?xml")); 

// or this even strstr($h, '<?xml version="1.0" encoding="UTF-8"?>' 

を使用して、このような何かを行うことができますこれは、生のXMLが返されますを与えるだろう。

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <var1>AAA</var1> 
    <var2>BBB</var2> 
    <var3>CCC</var3> 
</response> 
+0

ああ、完璧です。ありがとうございました! – Rob

0

あなたがPHP 5を使用している場合は、XML文字列からオブジェクトを作成するためのSimpleXMLライブラリを使用しています。

+0

私はそれをうまくやってみました...それを働かせることができませんでした。 – Rob

+0

動作しなかったSimpleXMLを使用してコードを提供してください。 – Mina

+0

また、あなたが持っている既存のコードを私たちに提示してください... – Mina

関連する問題