2016-06-17 4 views
0

soapサービスを打つと、データを取得してオブジェクトとしてデータにアクセスするためにsimplexml_load_stringで解析します(単純に基本的にデータにアクセスします)。それを出す。simplexml_load_stringはSOAPレスポンスからデータを取り除いています

のような石鹸サービスからの生のレスポンスが見えます:

:私は結果を得る

$result = simplexml_load_string((string)$result->DisplayCategoriesResult->any); 

enter image description here

次のコードを使用して をsimplexml_load_stringによって解析された結果

これは正しいように見えますが、ちょっと見ればわかりますし、カテゴリの名前も分かりません。

どうすれば適切な結果を得ることができますか?生データを「使用可能な」形式またはオブジェクトにする別の方法がある場合は、解答も受け入れます。

答えて

1

print_rまたはvar_dumpなどを使用するとXMLノードのテキストコンテンツが表示されません。 "伝統的な" PHPオブジェクトなので、標準のデバッグオプションを使用することはできません。テキストコンテンツにアクセスするには

(CDATAとして、またはその他の組み込みかどうか)、あなたはダウンの子要素にステップして、文字列にそれらをキャストする必要があります。

<?php 
$xml = <<<XML 
<randgo xmlns=""> 
    <status>0</status> 
    <message>Success</message> 
    <categories> 
     <category id="53"><![CDATA[go eat]]></category> 
     <category id="54"><![CDATA[go do]]></category> 
     <category id="55"><![CDATA[go out]]></category> 
    </categories> 
</randgo> 
XML; 

$sxml = simplexml_load_string($xml); 

foreach ($sxml->categories->category as $category) 
{ 
    echo $category['id'] . ": " . (string) $category, PHP_EOL; 
} 

=

$ php simplexml_categories.php 
53: go eat 
54: go do 
55: go out 

参照:https://eval.in/590975

(申し訳ありませんが、XMLにミスがある場合は、スクリーンショットから正しくコピーされたと思います...)

+0

ありがとう!これはうまくいきました。私はこれまで可能な解決策として基本を無視していました。 – Scripta55

0

カテゴリ名はCDATAです。それを読むには、このようなものを試してみてください。

$doc = new DOMDocument(); 
$doc->load((string)$result->DisplayCategoriesResult->any); 
$categories = $doc->getElementsByTagName("categories"); 
foreach ($categories as $categorie) { 
    foreach($categorie->childNodes as $child) { 
     if ($child->nodeType == XML_CDATA_SECTION_NODE) { 
      echo $child->textContent . "<br/>"; 
     } 
    } 
} 
関連する問題