2016-07-09 47 views
0

我試圖返回最後排序的固定數量的XML節點,以便我可以顯示「最近添加的」篩選器。我沒有存儲日期。如何使用PHP過濾最後10個節點?解析上次使用PHP排序的固定數量的XML子節點

XML:

<?xml version="1.0" encoding="utf-8"?> 
<trackList> 
    <track> 
    <title>Lost in the Star</title> 
    <creator>Toshiki Hayashi</creator> 
    <cover>images/thinlines.jpg</cover> 
    <location>mp3/toshiki hayashi - lost in the star.mp3</location> 
    <genre>hip-hop</genre> 
    <playlist>2</playlist> 
    </track> 
    <track> 
    <title>Black Orpheusr</title> 
    <creator>Ouska</creator> 
    <cover>images/ouska.jpg</cover> 
    <location>mp3/ouska - Black Orpheus.mp3</location> 
    <genre>rock</genre> 
    <playlist>2</playlist> 
    </track> 
    <track> 
    <title>Soul Below</title> 
    <creator>Ljones</creator> 
    <cover>images/Ljones.jpg</cover> 
    <location>mp3/Ljones - Soul Below.mp3</location> 
    <genre>hip-hop</genre> 
    <playlist>2</playlist> 
    </track> 
</trackList> 

PHP:

<?php 
$xml = new SimpleXMLElement('playlist100.xml', NULL, TRUE); 

foreach($xml->xpath('//track[playlist="1"]') as $child) 
    { 
    echo '<div class="song"><a href="' . $child->location . '">'; 
    echo '<img src="' . $child->cover . '" alt="cover" />'; 
    echo '<span class="artist">' . $child->creator . '</span>'; 
    echo '<span class="songTitle">' . $child->title . '</span></a></div>'; 
    } 

?> 
+0

請提供一些代碼你如何試圖至今。 –

+0

的XML 靈魂下面 Ljones 圖像/ Ljones.jpg MP3/Ljones - 靈魂Below.mp3 嘻哈 Por土族Errores 了Dj Neber 圖像/ djNeber.jpg MP3/DJ Neber - POR土族Errores.mp3 拉丁

+0

你在哪裏存儲數據? –

回答

0

考慮在那裏你將原始文件使用count()功能選擇只有最後的10個節點的XSLT解決方案。由於XSLT是格式良好的XML文件,因此您可以像讀取任何其他XML文件一樣讀取它,使用它來轉換原始文件,並使用SimpleXML處理輸出。

XSLT(外部另存爲的.xsl或嵌入PHP作爲字符串)

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output version="1.0" encoding="UTF-8" indent="yes" /> 
<xsl:strip-space elements="*" /> 

    <xsl:template match="trackList"> 
    <xsl:copy> 
     <xsl:variable name="count" select="count(track) - 9"/> 
     <xsl:apply-templates select="track[position() &gt;= $count]"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="track"> 
    <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:transform> 

PHP腳本

// LOAD XML AND XSL FILES 
$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->load('playlist100.xml'); 

$xslfile = new DOMDocument('1.0', 'UTF-8'); 
$xslfile->load('XSLTScript.xsl'); 

// TRANSFORM XML with XSLT 
$proc = new XSLTProcessor; 
$proc->importStyleSheet($xslfile); 
$newXml = $proc->transformToXML($dom); 

// PROCESS NEW XML STRING 
$xml = new SimpleXMLElement($newXml); 

foreach($xpath = $xml->xpath('//track') as $child) 
    { 
    echo '<div class="song"><a href="' . $child->location . '">'; 
    echo '<img src="' . $child->cover . '" alt="cover" />'; 
    echo '<span class="artist">' . $child->creator . '</span>'; 
    echo '<span class="songTitle">' . $child->title . '</span></a></div>'; 
    } 
+0

謝謝Parfait! 嘗試在將它們寫出來之前也洗牌。 –

+0

咦?洗牌意味着什麼? XSLT也可以對節點進行排序。 – Parfait

+0

PHP有能力混洗陣列。我想洗牌,或隨機化訂單。 –