2013-10-12 63 views
2

我product.xml:拆分XML數據頁PHP的

<product> 
    <name></name> 
    <price></price> 
    <short_desc></short_desc> 
    <quantity></quantity> 
</product> 

我如何可以將XML數據分割到多個頁面,比方說,我有產品的30紀錄,我想它顯示5每頁,那麼我有6頁在同一個file.php。

我已閱讀拆分到網頁,但它不工作,任何人都可以幫助我?

$objDOM = new DOMDocument(); 
    $objDOM->load("product.xml"); 

    $titleArray = array(); 

    $ps = $objDOM->getElementsByTagName("product"); 

    $allItems = array(
      "name" => $node->getElementsByTagName("name")->item(0)->nodeValue, 
      "rice" => $node->getElementsByTagName("price")->item(0)->nodeValue, 
      "short_desc" => $node->getElementsByTagName("short_desc")->item(0)->nodeValue, 
      "quantity" => $node->getElementsByTagName("quantity")->item(0)->nodeValue); 

    $itemsPerPage = 5; 
     $page = isset($_GET['page']) ? intval($_GET['page']) : 0; 

     foreach (array_slice($allItems, $page * $itemsPerPage, $page * $itemsPerPage + $itemsPerPage) as $item) { 
      echo "$item\n"; 
     } 

這是我一直在做,但它並沒有顯示任何東西,,

回答

0

你可以使用simplexml_load_string或使用simplexml_load_file功能(從PHP 5)? 如果您product.xml文件具有結構簡單,你可以很容易地做你想做的就是那樣的一些代碼:

$allItems = simplexml_load_file("product.xml"); 
$itemsPerPage = 5; 
$page = isset($_GET['page']) ? intval($_GET['page']) : 0; 

$pageItems = array_slice($allItems, $page * $itemsPerPage, $page * $itemsPerPage + $itemsPerPage) 

foreach($allItems AS $prod) { 
    echo $prod->name."<br>"; 
    echo $prod->price."<br>"; 
    echo $prod->short_desc."<br>"; 
    echo $prod->quantity."<br>"; 
    echo "---------<br>"; 
} 

另外,檢查你的XML文件:它必須以XML聲明和根元素開始!

<?xml version='1.0'?> 
<products> 
    <product> 
    <name>name1</name> 
    <price>price1</price> 
    <short_desc>desc1</short_desc> 
    <quantity>q1</quantity> 
    </product> 
    <product> 
    <name>name2</name> 
    <price>price2</price> 
    <short_desc>desc2</short_desc> 
    <quantity>q2</quantity> 
    </product> 
    <product> 
    <name>name3</name> 
    <price>price3</price> 
    <short_desc>desc3</short_desc> 
    <quantity>q3</quantity> 
    </product> 
</products> 
0

,而不是把所有的產品到一個數組,我想首先是利用了DOM文檔您正在使用提供了訪問單個元素和數據在一般的事實。

在以下示例中,通過使用DOMDocuments DOMXpath對象和LimitIterator,將所有產品元素的輸出限制爲當前頁面的範圍,從而完成分頁。您可以用下面的答案,正在SimpleXML的使用一個完整的例子:

下面是用法示例是同樣與DOM文檔和DOMXPath工作:

$doc = new DOMDocument(); 
$doc->loadXML($xml); 

$xpath = new DOMXPath($doc); 
$products = $xpath->query('/xml/product'); 

$_GET['page'] = 3; 
$itemsPerPage = 2; 

$pagination = new LimitPagination(
    defaultvar($_GET, 'page'), $products->length, $itemsPerPage 
); 

foreach ($pagination->getLimitIterator($products) as $product) { 
    /* @var $product DOMElement */ 
    echo $product->ownerDocument->saveXML($product), "\n"; 
} 

你可以找到完整的,自包含的示例代碼(包括XML)位置:https://gist.github.com/hakre/603638a18918b0549019