我有一个包含500多个项目的长xml数据文件,它以这种形式出现:
<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>
<ITEM>
<TITLE>ITEM name</TITLE>
<TYPE>TYPE </TYPE>
<DESCIPTION>DESCIPTIONiliate Page CPM</DESCIPTION>
<PRICE>PRICE</PRICE>
<ITEM>http://mysite.com/item-link</ITEM>
</ITEM>
</CATALOG>
我在php页面中使用以下代码从xml文件导入数据:
<?php
$ITEMSS = new SimpleXMLElement('ITEMS.xml', null, true);
echo <<<EOF
<table width="100%" align="center" border="1" bordercolor="#0099ff" cellpadding="1" cellspacing="0">
<tr>
<th bgcolor="#66ccff"><span class="style4">ITEM Name</span></th>
<th bgcolor="#66ccff"><span class="style4">item TYPE </span></th>
<th bgcolor="#66ccff"><span class="style4">item DESCIPTION </span></th>
<th bgcolor="#66ccff"><span class="style4">item PRICE</span></th>
<th bgcolor="#66ccff"><span class="style4">link to item</span></th>
</tr>
EOF;
foreach($ITEMSS as $ITEMS) // loop through our DATAS
{
echo <<<EOF
<tr height="30" align=middle>
<td><a href="{$ITEMS->ITEM}" target="_blank"><span class="STYLE7">{$ITEMS->TITLE}</span></a></td>
<td><span class="STYLE8">{$ITEMS->TYPE}</span></td>
<td><span class="STYLE8">{$ITEMS->DESCIPTION}</span></td>
<td><span class="STYLE8">{$ITEMS->PRICE}</span></td>
<td><a href="{$ITEMS->ITEM}" target="_blank"><B><span class="STYLE7">cHECK IT OUT</span></B></a></td>
</tr>
EOF;
}
echo '</table>';
?>
我需要在循环中添加一个“if”语句,如果“TYPE”具有某个值,则只选择一些数据,它会显示该数据,如果不是,它将跳过它。
还需要添加分页系统,因为要列出500多个项目,我希望表格显示最多的项目数量,即25个。
谢谢你们的帮助!
答案 0 :(得分:2)
您可以这样添加循环:
foreach($ITEMSS as $ITEMS) // loop through our DATAS
{
if($ITEMS->TYPE=="BoogeyWoogey")
{
echo <<<EOF
<tr height="30" align=middle>
<td><a href="{$ITEMS->ITEM}" target="_blank"><span class="STYLE7">{$ITEMS->TITLE}</span></a></td>
<td><span class="STYLE8">{$ITEMS->TYPE}</span></td>
<td><span class="STYLE8">{$ITEMS->DESCIPTION}</span></td>
<td><span class="STYLE8">{$ITEMS->PRICE}</span></td>
<td><a href="{$ITEMS->ITEM}" target="_blank"><B><span class="STYLE7">cHECK IT OUT</span></B></a></td>
</tr>
EOF;
}
}
假设您正在遍历foreach
,并且只想显示$ITEMS->TYPE
属性中是否包含值BoogeyWoogey
。
分页部分不会完全这么简单。
您可以这样做:
您可以这样添加循环:
$myLimit=(!empty($_REQUEST['myLimit']) ? $_REQUEST['myLimit'] : 0;
foreach($ITEMSS as $ITEMS) // loop through our DATAS
{
for($i=$myLimit;$i<$myLimit+25;$i++)
{
if($ITEMS->ITEM=="BoogeyWoogey")
{
echo <<<EOF
<tr height="30" align=middle>
<td><a href="{$ITEMS->ITEM}" target="_blank"><span class="STYLE7">{$ITEMS->TITLE}</span></a></td>
<td><span class="STYLE8">{$ITEMS->TYPE}</span></td>
<td><span class="STYLE8">{$ITEMS->DESCIPTION}</span></td>
<td><span class="STYLE8">{$ITEMS->PRICE}</span></td>
<td><a href="{$ITEMS->ITEM}" target="_blank"><B><span class="STYLE7">cHECK IT OUT</span></B></a></td>
</tr>
EOF;
}
}
}
但是您需要将变量$ myLimit通过$GET
或$_POST
传递给页面以在循环中使用它。 (随意更改它以使用$_SESSION
或任何其他适合您的想法 - 我认为在链接中使用变量将是最简单的,因此很可能$GET
应该这样做。< / p>
答案 1 :(得分:2)
作为替代方案,您可以通过xpath选择(并处理)TYPE元素中具有特定文本值的ITEM元素,例如
<?php
$doc = new SimpleXmlElement(getData());
foreach($doc->xpath("//ITEM[TYPE='A']") as $item) {
echo $item->DESCIPTION, "\n";
}
function getData() {
return <<< eox
<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>
<ITEM>
<TITLE>item 1</TITLE>
<TYPE>A</TYPE>
<DESCIPTION>desc1</DESCIPTION>
<PRICE>price1</PRICE>
<ITEM>item1-link</ITEM>
</ITEM>
<ITEM>
<TITLE>item x</TITLE>
<TYPE>B</TYPE>
<DESCIPTION>descx</DESCIPTION>
<PRICE>pricex</PRICE>
<ITEM>itemx-link</ITEM>
</ITEM>
<ITEM>
<TITLE>item y</TITLE>
<TYPE>B</TYPE>
<DESCIPTION>descy</DESCIPTION>
<PRICE>pricey</PRICE>
<ITEM>itemy-link</ITEM>
</ITEM>
<ITEM>
<TITLE>item 2</TITLE>
<TYPE>A</TYPE>
<DESCIPTION>desc2</DESCIPTION>
<PRICE>price2</PRICE>
<ITEM>item2-link</ITEM>
</ITEM>
</CATALOG>
eox;
}
打印
desc1
desc2
- 编辑:具有一些分页功能 -
<?php
define('ITEMS_PER_PAGE', 10);
$page = 1; // =intval($_GET['page']);
$posMin = $page*ITEMS_PER_PAGE;
$posMax = ($page+1)*ITEMS_PER_PAGE;
$doc = new SimpleXmlElement(getData());
foreach($doc->xpath("(//ITEM[TYPE='A'])[position()>=$posMin and position()<$posMax]") as $item) {
echo $item->DESCIPTION, "\n";
}
function getData() {
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>';
for($i=0; $i<100; $i++) {
$type = 0===$i%2 ? 'A':'B';
$xml .= "
<ITEM>
<TITLE>item $i</TITLE>
<TYPE>$type</TYPE>
<DESCIPTION>desc $i</DESCIPTION>
<PRICE>price $i</PRICE>
<ITEM>item{$i}-link</ITEM>
</ITEM>";
}
$xml.='</CATALOG>';
return $xml;
}
函数getData()
只是一些返回一些xml数据的样板
为了理解xpath查询,请阅读(好)xpath教程,请参阅例如Using XPATH to access XML elements (was: Good tutorial to learn xpath)