流控制取决于 xml 元素的值 [英] flow control depending on value of xml element

查看:32
本文介绍了流控制取决于 xml 元素的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很长的 xml 数据文件,其中包含 500 多个项目,它采用以下形式:

I have a long xml data file with 500+ items in it, it comes in this form:

<?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文件中导入数据:

and I use the following code in the php page to import data from the xml file:

<?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"具有特定值,它将显示该数据,否则将跳过它.

I need to add an "if" statement in the loop to select only some data if "TYPE" has a certain value, it will show that data, if not it will skip it.

还需要添加分页系统,因为要列出500多个项目,我希望表格显示混合数量的项目,比如25.

Also need to add paging system, since there will be 500+ item to be listed, I want the table to show a miximum number of items, saying 25.

谢谢大家的帮助!

推荐答案

作为替代方案,您可以通过 xpath,例如

As an alternative you could select (and process) only those ITEM elements that have a specific text value in the TYPE element via xpath, e.g.

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

-- 具有一些分页功能--

-- edit: with some paging functionality --

<?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 教程,请参阅例如使用 XPATH 访问 XML 元素(原为: 学习xpath的好教程)

The function getData() is just some boilerplate that returns some xml data.
For understanding the xpath query have a read of a (good) xpath tutorial, see e.g. Using XPATH to access XML elements (was: Good tutorial to learn xpath)

这篇关于流控制取决于 xml 元素的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆