2013-10-12 2 views
2

내있는 product.xml : 난의 난 제품 (30) 기록을 가지고 있고 내가 그것을 페이지 당 5를 보여주고 싶은 말을하자, 많은 페이지에 XML 데이터를 분할하는 방법을분할 XML 데이터

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

그래서 같은 file.php에 6 페이지가 있습니다.

페이지가 분리되어 읽었지만 작동하지 않는 경우 누구든지 도와 줄 수 있습니까?

$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

당신은 (PHP 5에서) simplexml_load_string 또는 simplexml_load_file 기능을 사용할 수 있습니까? 당신의 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

, 나는 우선은 일반적으로 개별 요소 및 데이터에 제공 액세스를 사용하고있는 DOMDocument 사실의 사용을 만들 것입니다.

다음 예제에서는 DOMDocuments DOMXpath 개체와 LimitIterator을 사용하여 모든 제품 요소의 출력을 현재 페이지의 범위로 제한하여 페이지 매김을 수행합니다.

똑같이 DOMDocument를하고 DOMXPath와 함께 작동 사용 - 예입니다 당신은 SimpleXML을 사용하고 있습니다 다음과 같은 대답과 함께 전체 예제를 찾을 수 있습니다 :

$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