5

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と言う混合アイテム数を表示する必要があります。

皆さん、助けてくれてありがとう!

4

2 に答える 2

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チュートリアルを読んでください。たとえば、XPATHを使用してXML要素にアクセスするを参照してください(以前は:xpathを学ぶための優れたチュートリアル)

于 2012-09-10T13:13:34.067 に答える
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->TYPEBoogeyWoogey

ページングの部分はそれほど単純ではありません。

あなたはこのようなことをすることができます:

次のようにループを追加できます。

$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このトリックを実行する必要があります。

于 2012-09-10T13:04:19.563 に答える