Как извлечь значения из этого объекта XML? - PullRequest
1 голос
/ 14 января 2011
object(SimpleXMLElement)#1 (3) { 
["@attributes"]=> array(1) { 
   ["responsecode"]=> string(3) "200" 
} 
["nextpage"]=> object(SimpleXMLElement)#2 (0) { 
} 
["resultset_web"]=> object(SimpleXMLElement)#3 (2) { 
   ["@attributes"]=> array(4) { 
      ["count"]=> string(2) "10" 
      ["start"]=> string(1) "0" 
      ["totalhits"]=> string(8) "22497060" 
      ["deephits"]=> string(8) "23000000" 
   } 
   ["result"]=> array(10) { 
      [0]=> object(SimpleXMLElement)#4 (7) { 
         ["abstract"]=> string(110) "MSN's all-in-one Internet portal, the home of Hotmail, MSN Messenger, MSNBC News, Encarta, and Slate Magazine." 
         ["clickurl"]=> string(360) "http://teqpad.com/www/msn.com" 
         ["date"]=> string(10) "2011/01/14" 
         ["dispurl"]=> object(SimpleXMLElement)#14 (0) { 
         } 
         ["size"]=> string(5) "82136" 
         ["title"]=> string(3) "MSN" 
         ["url"]=> string(19) "http://www.msn.com/" 
      } 

Я хочу извлечь значения title и abstract сверху xml, используя php.

Ответы [ 5 ]

1 голос
/ 14 января 2011

Это похоже на var_dump для var, который содержит объект SimpleXML. Итак, скажем, что у вас есть что-то вроде этого:

//$data i a string containing your XML
$xmlobj = new SimpleXMLElement($data);

тогда вы сможете получить доступ к таким предметам:

foreach ($xmlobj->resultset_web->result as $result) {
    echo $result->abstract;
    echo $result->title;
}
1 голос
/ 14 января 2011

Я вижу, что у вас есть около 10 названий для извлечения, исходя из этого:

["result"]=> array(10) { 

Способ сделать это будет:

foreach ($simpleXML->resultset_web->result as $result) {
    $title = $result->title;
    $abstract = $result->abstract;
}
1 голос
/ 14 января 2011

Вы уже проанализировали его с помощью SimpleXML, и вы действительно хотите пройти через ваш объект и найти значения title и abstract.

Если ваш объект $xml, $xml->resultset_web->result[0]->abstract содержит abstract, а
$xml->resultset_web->result[0]->title содержит title для одного значения. Для всех значений

foreach ($xml->resultset_web->result as $v) {
  $title = $v->title;
  $abstract = $v->title;
}
0 голосов
/ 14 января 2011

Не проверено, но должно работать:

$ob->resultset_web->result[0]->title;

Как уже говорилось, просто прочитайте документацию по php simplexml. И обратите внимание, что не каждый случай будет таким простым: если у вас есть несколько результатов, которые вам придется перебирать с помощью метода children (), вы не можете получить к ним прямой доступ, как я делал выше.

0 голосов
/ 14 января 2011

Если вы хотите получить все узлы с путем resultset_web -> result -> title:

$xml = [your object];
$allTitlesAsArray = $xml->xpath('/resultset_web/result/title');
$allAbstractAsArray = $xml->xpath('/resultset_web/result/abstract');
...