提问人:michael 提问时间:4/11/2010 更新时间:4/11/2010 访问量:445
如何解析 XML 页面以按我想要的方式输出其数据片段?
how do i parse an xml page to output its data pieces to the way i want?
问:
这是我要解析的页面 (我给出的 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的
答:
0赞
Danten
4/11/2010
#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;
带有结果数字的最后一个示例可能不起作用,但它是沿着这些思路进行的。
0赞
hamax
4/11/2010
#2
使用“$x->childNodes”,您只能获得直接子项。您可能需要查看 php 文档:http://php.net/manual/en/class.domdocument.php
我认为这个可以更好:
http://si.php.net/manual/en/book.simplexml.php
0赞
Rasmus
4/11/2010
#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
评论