2016-06-17 62 views
0

因此,當我獲取數據並通過simplexml_load_string解析數據以便作爲對象訪問數據(或者基本訪問數據)時,我正在打擊soap服務,simplexml_load_string似乎剝離出來。simplexml_load_string剝離肥皂響應中的數據

從SOAP服務A生響應的樣子:

enter image description here

一個結果通過使用下面的代碼simplexml_load_string 解析:

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

我得到的結果是:

enter image description here

這看起來是正確的,但仔細一看,你會注意到它的只是id和類別的名稱左behing simplexml_load_string

我怎麼能得到正確的結果?如果還有另一種將原始數據轉換爲「可用」形式或對象的方式,那麼也可以使用解決方案

回答

1

使用print_rvar_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/>"; 
     } 
    } 
}