2013-03-12 4 views
-1

Как я могу прочитать все значения int из xml ниже, используя php 5?Как прочитать определенный узел XML, используя php

Я пытаюсь использовать simplexml_load_string, но не могу получить точное значение.

Мой php-код.

$xml = simplexml_load_string($result); 
echo $xml->params[0]->param[0]->value[0]->array[0]->data[0]->value[0]->array[0]->data[0]->value[0]->int; 

XML-

<?xml version='1.0'?> 
<methodResponse> 
    <params> 
     <param> 
      <value><array><data> 
       <value><array><data> 
        <value><int>51838</int></value> 
        <value><double>57.83089533672552</double></value> 
       </data></array></value> 
       <value><array><data> 
        <value><int>20820</int></value> 
        <value><double>56.58239590002292</double></value> 
       </data></array></value> 
       <value><array><data> 
        <value><int>49286</int></value> 
        <value><double>55.950788550857176</double></value> 
       </data></array></value> 
       <value><array><data> 
        <value><int>51843</int></value> 
        <value><double>55.09419216830168</double></value> 
       </data></array></value> 
      </data></array></value> 
     </param> 
    </params> 
</methodResponse> 
+0

Включите ваш PHP-код, так как с этим вы сталкиваетесь. – Boaz

ответ

0

Не буду комментировать на чрезмерно глубокой вложенности происходит в вашем XML. Я предполагаю, что у вас есть причина для этого.

$doc = new SimpleXMLElement($xml); 
$valueList = $doc->xpath('/methodResponse/params/param/value/array/data/value'); 
while(list(, $node) = each($valueList)) { 
    $intElement = $node->xpath('array/data/value/int'); 
    echo $intElement[0] . PHP_EOL; 
} 

приведет:

51838 
20820 
49286 
51843 

$valueList присваивается список всех value узлов. Второй запрос xpath получает int в каждом узле. Делайте некоторое чтение на SimpleXMLElement и xpath.

+0

Просто для уточнения: причина «чрезмерной глубины гнездования» называется XML-RPC (http://xmlrpc.scripting.com/spec.html). Это может выглядеть перегруженным, но так оно и было указано. – Quasdunk

1
$domObj= new DOMDocument(); 
$domObj->load("test.xml"); 
$value= $domObj->getElementsByTagName("value"); 
foreach($value as $val) 
{ 

$ints = $val->getElementsByTagName("int"); 
$intVal = $ints->item(0)->nodeValue; 

echo "$intVal"; 
} 
Смежные вопросы