Как мне разобрать страницу XML, чтобы вывести ее части данных так, как я хочу? - PullRequest
1 голос
/ 11 апреля 2010

вот страница, которую я хочу проанализировать (ссылка на API, которую я дал, является просто тестом разработчика, так что все в порядке, чтобы быть публичным) http://api.scribd.com/api?method=docs.getList&api_key=2apz5npsqin3cjlbj0s6m

вывод, который я ищу, примерно такой (пока)

 Doc_id: 29638658
 access_key: key-11fg37gwmer54ssq56l3
 secret_password: 1trinfqri6cnv3gf6rnl
 title: Sample
 description: k
 thumbnail_url: http://i6.scribdassets.com/public/images/uploaded/152418747/xTkjCwQaGf_thumbnail.jpeg
 page_count: 100

Я перепробовал все, что смог найти в интернете, но ничего не работает. у меня есть этот сценарий

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("http://api.scribd.com/api?method=docs.getList&api_key=2apz5npsqin3cjlbj0s6m");

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item) {
  print $item->nodeName . " = " . $item->nodeValue;
 }



 ?>

его вывод выглядит так:

#text = 
  resultset = 

      29638658
      key-11fg37gwmer54ssq56l3
      1trinfqri6cnv3gf6rnl

        Sample


        k

      http://i6.scribdassets.com/public/images/uploaded/152418747/xTkjCwQaGf_thumbnail.jpeg

        DONE

      100


      29713260
      key-18a9xret4jf02129vlw8
      25fjsmmvl62l4cbwd1vq

        book2


        description bla bla 

      http://i6.scribdassets.com/public/images/uploaded/153065528/oLVqPZMu3zhsOn_thumbnail.jpeg

        DONE

      7

  #text = 

Мне нужна серьезная помощь, я действительно застрял и не знаю, что делать. пожалуйста, пожалуйста, помогите мне. Thnx

Ответы [ 3 ]

0 голосов
/ 11 апреля 2010

С "$ x-> childNodes" вы получаете только прямых потомков. Вы можете проверить документацию PHP: http://php.net/manual/en/class.domdocument.php

И я думаю, что этот мог бы быть лучше:
http://si.php.net/manual/en/book.simplexml.php

0 голосов
/ 11 апреля 2010

Быстро и грязно, как должно быть:

<?php 
 $x = simplexml_load_file('http://api.scribd.com/api?method=docs.getList&api_key=2apz5npsqin3cjlbj0s6m');
 foreach($x->resultset->result as $v) {
     foreach((array)$v as $kk=>$vv) {
         echo $kk.": ".trim($vv)."<br>\n";
     }
     echo "<br><br>\n";
 }

Будет выведено в запрошенном вами формате:

doc_id: 29638658
access_key: key-11fg37gwmer54ssq56l3
secret_password: 1trinfqri6cnv3gf6rnl
title: Sample
description: k
thumbnail_url: http://i6.scribdassets.com/public/images/uploaded/152418747/xTkjCwQaGf_thumbnail.jpeg
conversion_status: DONE
page_count: 100

doc_id: 29713260
access_key: key-18a9xret4jf02129vlw8
secret_password: 25fjsmmvl62l4cbwd1vq
title: book2
description: description bla bla
thumbnail_url: http://i6.scribdassets.com/public/images/uploaded/153065528/oLVqPZMu3zhsOn_thumbnail.jpeg
conversion_status: DONE
page_count: 7
0 голосов
/ 11 апреля 2010

Я рекомендую вам загрузить данные XML в новый SimpleXmlElement объект, поскольку это позволит вам выполнять запросы xpath к документу.

Вам нужно будет немного изучить, как это работает, но вот несколько советов ...

Выполнить xpath так:

// $xml is a SimpleXMLElement object
$xml = simplexml_load_file('/path/to/file');
$nodes = $xml->xpath('/xpathquery');

Один / представляет корневой узел (в вашем случае rsp). Двойная косая черта представляет любой соответствующий узел. Например, // title вернет все заголовки. Каждый результат запроса xpath является массивом SimpleXMLElements. Вы можете получить данные из него так:

# Untested        
$xml = simplexml_load_file('/path/to/file');
$nodes = $xml->xpath('//result');

foreach ($result as $node) {
    // Print out the value in title
    echo $node->title;
}

// Print out the amount of results
echo $xml->rsp->attributes()->totalResultsAvailable;

Последний пример с номерами результатов может не работать, но он соответствует этим правилам.

...