Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 流控制取决于xml元素的值_Php_Xml - Fatal编程技术网

Php 流控制取决于xml元素的值

Php 流控制取决于xml元素的值,php,xml,Php,Xml,我有一个包含500多个项目的长xml数据文件,其形式如下: <?xml version="1.0" encoding="ISO-8859-1"?> <CATALOG> <ITEM> <TITLE>ITEM name</TITLE> <TYPE>TYPE </TYPE> <DESCIPTION>DESCIPTIONiliate Page CPM</DESCIPTION>

我有一个包含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


谢谢你们的帮助

您可以这样添加循环:

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;
    }
}
$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;
        }
    }
}

但是您需要通过$GET或$u POST将变量$myLimit传递给页面,以便在循环中使用它。您可以随意更改它以使用$\u会话或任何其他适合您的方式-我认为在链接中使用变量将是最简单的,因此最有可能的方法是使用$GET。

作为替代方法,您可以通过,例如,选择和处理在TYPE元素中具有特定文本值的ITEM元素

-编辑:具有一些分页功能-

<?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教程,例如,请参阅

欢迎您,但我不明白我必须做什么。请使用php中的“if”从XML判断您的头部。感谢Fluffeh,我解决了if问题,现在我需要添加分页系统,以显示每页25项感谢您,它非常适合if部分,现在我需要分页部分,我如何在页面中列出项目,比如site/item.php?page=1等等,以便每页最多列出25个项目现在我需要分页部分-这是一个新问题。@VolkerK,他确实在原始版本中问了这个问题,此外,我已经用一种简单的方式编写了代码:该死。。。现在我也必须修改我的答案:它已经包含在第一个问题中,但我刚刚得到了第一部分的答案,即if部分。我不明白,我应该在哪里包含xml文件以获取数据,我应该在哪里放置代码以选择一些数据并创建分页系统?这是一个自包含的示例,准备好进行复制和粘贴评估。我有一个小问题,在第一页它只显示4个项目,如果我每页最多有5个项目,那么它从下一页开始显示5个项目,我还添加了下一页和上一页来显示下一页和上一页,但不知道如何在最后一页停止,它一直在上升,对于上一个页面,它会一直下降,直到页面显示-1!!
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;
}