【问题标题】:how do i parse an xml page to output its data pieces to the way i want?如何解析 xml 页面以按照我想要的方式输出其数据片段?
【发布时间】:2010-04-10 22:59:19
【问题描述】:

这是我要解析的页面 (我提供的 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 = 

我需要重大帮助,我真的卡住了,不知道该怎么办。请帮帮我。谢谢

【问题讨论】:

标签: php xml parsing xml-parsing


【解决方案1】:

我建议您将 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;

带有结果数字的最后一个示例可能行不通,但它符合这些原则。

【讨论】:

    【解决方案2】:

    使用 "$x->childNodes" 你只能得到直接子节点。您可能需要查看 php 文档: http://php.net/manual/en/class.domdocument.php

    我认为这个可能会更好:
    http://si.php.net/manual/en/book.simplexml.php

    【讨论】:

      【解决方案3】:

      又快又脏,事情本该如此:

      <?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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多