управление потоком в зависимости от значения элемента xml

У меня есть длинный файл данных xml с более 500 элементами в нем, он поставляется в такой форме:

<?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» в цикле, чтобы выбрать только некоторые данные, если «ТИП» имеет определенное значение, он покажет эти данные, если не будет пропущен.

Также необходимо добавить пейджинговую систему, так как там будет более 500 элементов, которые будут перечислены, я хочу, чтобы в таблице было показано минимальное количество элементов, говоря 25.

Спасибо, ребята, за вашу помощь!

Solutions Collecting From Web of "управление потоком в зависимости от значения элемента xml"

В качестве альтернативы вы можете выбрать (и обработать) только те элементы ITEM, которые имеют определенное текстовое значение в элементе TYPE через xpath , например

 <?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; } Дайте <?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; } Дайте <?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; } Дайте <?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; } Дайте <?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; } Дайте <?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; } Дайте <?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; } Дайте <?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; } Дайте <?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, см. Например, Использование XPATH для доступа к элементам XML (было: Хороший учебник для изучения xpath)

Вы можете добавить цикл как таковой:

 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 должен сделать трюк.