0

http://www.topbuy.com.au/tbcart/tbadmin/datafeed/shoppingcom.xml

これは私のフィードURLであり、ブラウザで開かないか、開くのに数時間かかります。

PHPページに検索ボックス(配置する場所)を配置するPHPページを作成し、[送信]をクリックすると、対応する製品の価格を検索して表示する必要があります。

それで、これまたは他の推奨事項にSimpleXMLを使用しますか?

<Products>
<Product><MPN><![CDATA[INK-PE-009]]></MPN><Manufacturer><![CDATA[Epson]]></Manufacturer><ProductName><![CDATA[Epson T009 Colour Compatible Inkjet Cartridge]]></ProductName><ProductURL><![CDATA[http://www.topbuy.com.au/tbcart/pc/Epson-T009-Colour-Compatible-Inkjet-Cartridge-p3343.htm?utm_source=TopBuy_ShoppingCom&utm_content=&utm_medium=cpc&dismode=1&utm_campaign=TBDF-XX10421]]></ProductURL><ProductType><![CDATA[Compatible Ink Cartridges]]></ProductType><ImageURL><![CDATA[http://www2.topbuy.com.au/tbcart/pc/catalog/General/TBDF-XX10421_1.jpg]]></ImageURL><Price>4.09</Price><OriginalPrice>9</OriginalPrice><Category><![CDATA[Consumables->Compatible Ink Cartridges]]></Category><ProductDescription><![CDATA[$4.05 Cash Price see store for detailsRelated Brand  EpsonOriginal Cartridge Equivalent T009Related Printers STYLUS 1270, STYLUS 1280, STYLUS 1290, STYLUS 3300C, STYLUS PHOTO 1270, STYLUS PHOTO 1290, STYLUS PHOTO 1290 silverThis cartridge works in the following printers  Epson Stylus Photo 1270/1280Please check the name (code) of the cartridge in your printer before ordering to ensure that it matches the name of the cartridges you are ordering from us. In some instances a printer can take more than one cartridge type and ...]]></ProductDescription><Stock>Y</Stock><ShippingCost>10</ShippingCost><StockDescription>No.1 OZ SUPERSTORE AUS WARRANTY FAST SHIPPING</StockDescription><Condition>Brand New</Condition></Product>
<Product><MPN><![CDATA[INK-PE-013]]></MPN><Manufacturer><![CDATA[Epson]]></Manufacturer><ProductName><![CDATA[Epson T013 Black Compatible Inkjet Cartridge]]></ProductName><ProductURL><![CDATA[http://www.topbuy.com.au/tbcart/pc/Epson-T013-Black-Compatible-Inkjet-Cartridge-p3345.htm?utm_source=TopBuy_ShoppingCom&utm_content=&utm_medium=cpc&dismode=1&utm_campaign=TBDF-XX10423]]></ProductURL><ProductType><![CDATA[Compatible Ink Cartridges]]></ProductType><ImageURL><![CDATA[http://www2.topbuy.com.au/tbcart/pc/catalog/General/TBDF-XX10423_1.jpg]]></ImageURL><Price>2.09</Price><OriginalPrice>5</OriginalPrice><Category><![CDATA[Consumables->Compatible Ink Cartridges]]></Category><ProductDescription><![CDATA[$2.07 Cash Price see store for detailsRelated Brand  EpsonOriginal Cartridge Equivalent T013Related Printers STYLUS COLOR 480, STYLUS COLOR 580, STYLUS COLOR C20, STYLUS COLOR C40, STYLUS COLOUR 480, STYLUS COLOUR 580, STYLUS COLOUR C20UX, STYLUS COLOUR C40SX, STYLUS COLOUR C40UXThis cartridge works in the following printers  Epson Stylus Colour 480/580Please check the name (code) of the cartridge in your printer before ordering to ensure that it matches the name of the cartridges you are ordering from us. In some instances a ...]]></ProductDescription><Stock>Y</Stock><ShippingCost>10</ShippingCost><StockDescription>No.1 OZ SUPERSTORE AUS WARRANTY FAST SHIPPING</StockDescription><Condition>Brand New</Condition></Product>
4

1 に答える 1

2

一度に完全なxmlをメモリにロードする必要がないため、 XMLReaderクラスを使用することをお勧めします。

欠点は、手動で検索とフィルタリングを実装する必要があることです。単純な名前検索の場合、次のようなことができます。

$reader = new XMLReader;
$reader->open('shoppingcom.xml');

while ($reader->read()) {
    if ($reader->name == 'Product') {
        $productxml = $reader->readOuterXML();
        while ($reader->read()) {
            if ($reader->name == 'ProductName' && stristr($reader->readInnerXML(), 'adidas')) {
                print $productxml;
                // now it contains the <Product>...</Product> fragment of the xml
                // you can use simplexml on this fragment, or just add an if for Prize node
            }
            if ($reader->name == 'Product' && $reader->nodeType == XMLReader::END_ELEMENT) {
                break;
            }
        }
    }
}

それでも、フィードの例はしっかり64Mしています。検索するフィールドにインデックスを付けてxmlフラグメントを返すデータベースを作成すると、ライブ検索の結果が向上する可能性があるため、すべてをテーブルに正規化する必要はありません。 。

于 2012-08-30T07:05:13.453 に答える