当前位置:Gxlcms > PHP教程 > php如何每页读取三条xml数据?

php如何每页读取三条xml数据?

时间:2021-07-01 10:21:17 帮助过:2人阅读

以下代码可以将“9.xml”的shortdesc字段全部读出:
-------------------------------------------------------------------------------
$xml_array=simplexml_load_file('9.xml'); //将XML中的数据,读取到数组对象中

foreach($xml_array as $tmp){
echo $tmp->shortdesc."
";
}

?>
---------------------------------------------------------------------------------
由于数据量非常大,我想实现的是每页只显示三条数据,当点击“下一步”按钮时,就接着显示下三条数据,直到数据全部显示完成,再点“下一步”按钮时,页面没有变化。请教如何实现?最好有代码,谢谢了。


回复讨论(解决方案)

那就不应该存到xml里面,存到数据库里面

那就不应该存到xml里面,存到数据库里面
+1
存数据库里吧,用limit

如果能存在数据库里,那么操作会很方便。如果不能的话,可以将解析的数据先缓存下来最好

你原来是这样输出的
foreach($xml_array as $tmp){
echo $tmp->shortdesc."
";
}

要这样输出才行
$page = ($_GET['page'] - 1) * 3;
for($i=$page; $i<$page+3; $i++) {
echo $xml[$i]->shortdesc."
";
}

能不能详细点,水平有限,不是很理解啊!
你原来是这样输出的
foreach($xml_array as $tmp){
echo $tmp->shortdesc."
";
}

要这样输出才行
$page = ($_GET['page'] - 1) * 3;
for($i=$page; $i<$page+3; $i++) {
echo $xml[$i]->shortdesc."
";
}

老大的代码够明了的了
// 获取数组
$xml_array=simplexml_load_file('9.xml');
// 从第几条开始。你不是要求分页嘛,分页的话总得有个数据起始位置和偏移量。

// 那么这个数据起始位置就是 $page。 假设你要第2页,那么传入参数$_GET['page'] === 2
// (2-1)*3 即是 3 。这是按数组键值取得数据的,数组的键值从0开始。那么 0,1,2就是第一页,3,4,5就是第二页
$page = ($_GET['page'] - 1) * 3;
// 循环3次,计算看看$i每次的值,分别是 3, 4, 5 。那么就是上面说的取键值为3,4,5的数据
for($i=$page; $i<$page+ 3; $i++) {
echo $xml[$i]->shortdesc."
";
}
// 下一页的链接传入的参数就是 $_GET['page'] + 1 喽

这个循环语句我是已经明白,现在还有一个疑问:“$xml[$i]”是怎么来的?是不是还少了一句啊?请赐教,谢谢!

老大的代码够明了的了
// 获取数组
$xml_array=simplexml_load_file('9.xml');
// 从第几条开始。你不是要求分页嘛,分页的话总得有个数据起始位置和偏移量。

// 那么这个数据起始位置就是 $page。 假设你要第2页,那么传入参数$_GET['page'] === 2
// (2-1)*3 即是 3 。这是按数组键值取得数据的,数组的键值从……

$xml[$i] 就是 $xml_array[$i] 。 伪代码,表达的意思是一样

$xml[$i] 就是 $xml_array[$i] 。 伪代码,表达的意思是一样

为简化,我只显示一页,我用以下代码,既没结果,也没用错误提示:

---------------------------------------------------------------------------------------------
$xml_array=simplexml_load_file('9.xml'); //将XML中的数据,读取到数组对象中

$page = 3;
for($i=$page; $i<$page+3; $i++) {
echo $xml[$i]->shortdesc."
";
}
?>
----------------------------------------------------------------------------------------
我用以下代码,错误提示为:“Warning: main() [function.main]: Cannot add element dataroot number 3 when only 0 such elements exist in D:\wwwroot\jupiter418app\wwwroot\temp\dx1.php on line 66”
----------------------------------------------------------


$xml_array=simplexml_load_file('9.xml'); //将XML中的数据,读取到数组对象中

$page = 3;
for($i=$page; $i<$page+3; $i++) {
echo $xml_array[$i]->shortdesc."
";
}
?>
-------------------------------------------------------------

还请赐教!

因为你有:
$xml_array=simplexml_load_file('9.xml'); //将XML中的数据, 读取到数组对象中
才有所以我才有 $xml_array[$i]->shortdesc 一说,数组嘛
实际上 simplexml_load_file 返回的结构中,第一层并不是数组
需要知道你的 9.xml 具体内容,才能知道如何操作

引用 8 楼 的回复:

$xml[$i] 就是 $xml_array[$i] 。 伪代码,表达的意思是一样


为简化,我只显示一页,我用以下代码,既没结果,也没用错误提示:

---------------------------------------------------------------------------------------------
…… 贴出你的xml代码瞧瞧!

9.xml内容如下:
--------------------------





短信



2012-3-23 14:32:30
http://www.282930.cn


短信



2012-3-23 14:32:30
http://www.csdn.net


短信



2012-3-23 14:32:30
http://www.csdn.net

......




那就是你的不对了,你从一开始就没有提供正确的信息
你的
foreach($xml_array as $tmp){
echo $tmp->shortdesc."
";
}
并不能输出文档内容
要这样才可以
foreach($xml_array->news->new as $tmp){
echo $tmp->shortdesc."
";
}

而 $xml_array->news->new 是一个数组,于是
$xml = $xml_array->news->new;
$page = min(3, count($xml)-3);
for($i=$page; $i<$page+3; $i++) {
echo $xml[$i]->shortdesc."
";
}
就成立了

非常感谢各位耐心的解答

不用等待了,你盗我数据,我直接换名了!

人气教程排行