2011-05-22 37 views
2

我想閱讀下列XML字符串中的相關節點讀取XML節點,到最後顯示:嘗試使用PHP DOM

flerror:0

Message from directory:Pings being forwarded to 11 services!

<?xml version="1.0"?> 
<methodResponse> 
    <params> 
    <param> 
     <value> 
     <struct> 
    <member><name>flerror</name><value><boolean>0</boolean></value></member> 
    <member><name>message</name><value><string>Pings being forwarded to 11 services!</string></value></member> 
</struct> 
     </value> 
    </param> 
    </params> 
</methodResponse> 

我試着使用:

$doc = new DOMDocument(); 
$doc->loadXML($xmlString); 
$value = $doc->getElementsByTagName("value"); 
$value = $value->item(0)->nodeValue; 

並獲得:

<br>flerror0<br> 
    messagePings being forwarded to 11 services! 

我可以再用字符串解析函數來分離字符串,但我需要一個更清晰的解決方案。

任何建議的改進,可能會避免額外的字符串解析?

謝謝!

+0

您的代碼適用於我:http://codepad.org/aximvvBG。 'nodeValue'會爲您提供它所提取元素的組合DOMTextNode值。如果你想單獨的nodeValues,獲取單獨的節點,並用'sprintf'格式化輸出。 – Gordon 2011-05-22 09:47:01

回答

2

我對DOMDocument沒有太多的經驗。但看起來像你的XML是小而簡單的,我建議使用simple xml。以下是我已經寫了

<?php 
$xmlString = "<?xml version=\"1.0\"?> 
<methodResponse> 
    <params> 
    <param> 
     <value> 
     <struct> 
    <member><name>flerror</name><value><boolean>0</boolean></value></member> 
    <member><name>message</name><value><string>Pings being forwarded to 11 services!</string></value></member> 
</struct> 
     </value> 
    </param> 
    </params> 
</methodResponse> 
"; 

$xml = simplexml_load_string($xmlString); 
echo '<pre>'; 
print_r($xml->params->param->value); 
echo '</pre>'; 

?> 

,並得到

SimpleXMLElement Object 
(
    [struct] => SimpleXMLElement Object 
     (
      [member] => Array 
       (
        [0] => SimpleXMLElement Object 
         (
          [name] => flerror 
          [value] => SimpleXMLElement Object 
           (
            [boolean] => 0 
           ) 

         ) 

        [1] => SimpleXMLElement Object 
         (
          [name] => message 
          [value] => SimpleXMLElement Object 
           (
            [string] => Pings being forwarded to 11 services! 
           ) 

         ) 

       ) 

     ) 

) 

我認爲現在它會更容易訪問的每一個節點。

+0

這有所幫助。謝謝! – Enthusiast 2011-05-29 16:36:12

0

我曾與DOM文檔類似的問題,它似乎並不能夠給來自一個名爲「參數」節點的內容...

嘗試更改名稱爲「參數」,它會工作

真實故事