simplexml_load_file sortieren

kleinlich

Grünschnabel
Hallo,

ich fange gerade erst an, mich mit dem Thema XML auseinander zu setzten.

Mein erstes "Projekt" besteht aus einer übersicht meiner Videosammlung, die mir DVD Profiler als XML Datei ausgibt.

Gekürzt sieht die Datei folgendermaßen aus:
Code:
<DVD>
  <ID>010884523317.5</ID>
  <UPC>010884-523317</UPC>
  <ProfileTimestamp>2006-03-23 18:27:21</ProfileTimestamp>
  <Title>Shaft</Title>
  <SortTitle>Shaft</SortTitle>
  <Rating>FSK-16</Rating>
  <ProductionYear>2000</ProductionYear>
  <Released>2001-04-12</Released>
  <RunningTime>95</RunningTime>
  <CaseType>Keep Case</CaseType>
  <Genres>
    <Genre>Action</Genre>
  </Genres>
  <Studios>
    <Studio>Paramount Pictures</Studio>
  </Studios>
  <Actors>
    <Actor>
      <FirstName>Samuel</FirstName>
      <MiddleName>L.</MiddleName>
      <LastName>Jackson</LastName>
      <Role>John Shaft</Role>
    </Actor>
    <Actor>
      <FirstName>Vanessa</FirstName>
      <MiddleName>L.</MiddleName>
      <LastName>Williams</LastName>
      <Role>Carmen Vasquez</Role>
    </Actor>
    <Actor>
      <FirstName>Jeffrey</FirstName>
      <LastName>Wright</LastName>
      <Role>Peoples Hernandez</Role>
    </Actor>
    <Actor>
      <FirstName>Christian</FirstName>
      <LastName>Bale</LastName>
      <Role>Walter Wade, Jr.</Role>
    </Actor>
  </Actors>
  <Credits>
    <Credit>
      <FirstName>John</FirstName>
      <LastName>Singleton</LastName>
      <CreditType>Direction</CreditType>
      <CreditSubtype>Director</CreditSubtype>
    </Credit>
    <Credit>
      <FirstName>Ernest</FirstName>
      <LastName>Tidyman</LastName>
      <CreditType>Writing</CreditType>
      <CreditSubtype>Original Material By</CreditSubtype>
    </Credit>
  </Credits>
  <Overview>Wer schlägt erst zu und stellt dann die Fragen? Samuel L. Jackson ist Shaft - he&apos;s the man. John Singleton (Boys &apos;N&apos; the Hood), führte Regie in diesem coolen action-geladenen Thriller.

Bei einem Onkel wie John Shaft (Richard Roundtree in seiner Original-Rolle) als Mentor überrascht es nicht, dass der neue SHAFT der coolste Typ ist und brandheiße Action garantiert.
Um einen rassistischen Killer (Christian Bale) hinter Gitter zu bringen, muss Shaft die einzige Augenzeugin (Toni Collette) aufspüren. Je näher er seinem Ziel kommt, desto gefährlicher wird es. Doch cool und gnadenlos hart wie er ist, lässt er korrupte Polizisten und kaltblütige Drogenbosse für ihre Straftaten büßen.</Overview>
</DVD>


Ausgelesen wird die Datei mit:
PHP:
<?php
$xml = simplexml_load_file("dvd.xml"); 
foreach ( $xml->DVD as $dvd ) { 

  echo "{$dvd->Title[0]}<br>{$dvd->OriginalTitle[0]}";

}

?>
Natürlich mit wesentlich mehr Code, aber um mein Problem zu erläutern sollte das genügen.

Jetzt möchte ich, dass die Filme in der Übersicht nach Möglichkeit alphabethisch nach <Title> geordnet werden. Zurzeit werden sie leider nach <ID> geordnet angezeigt, da diese nunmal in der XML Datei zuoberst steht.

Weis da jemand Rat?
Ich bin für jede Hilfe dankbar.
 
Hallo,

nimm XSLT. Da sollte dann <xsl:sort> dein Helfer sein.

Um die prinzipielle Funktionsweise zu verdeutlichen, hier ein kleines Beispiel für ein Stylesheet, welches mit einer DVD-Profiler Datei arbeitet und alle Titel alphabetisch sortiert untereinander schreibt.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
     <HTML>
          <HEAD>
               <TITLE>Test</TITLE>
          </HEAD>
          <BODY>
               <xsl:apply-templates select="Collection"/>
          </BODY>
     </HTML>
  </xsl:template>

  <xsl:template match="Collection">
          <xsl:apply-templates select="DVD">
               <xsl:sort select="Title" order="ascending" data-type="text"/>
          </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="DVD">
    <xsl:value-of select="Title"/><br/>
  </xsl:template>
</xsl:stylesheet>

Das ganze kann jetzt natürlich noch beliebig erweitert und verbessert werden :)

hth
THMD
 
Vielen Dank für die schnelle Hilfe!
Leider hatte ich erst jetzt Zeit, das Ganze zu testen.
Funktioniert prima.

Ein kleines Problem habe ich jetzt allerdings noch.
DVD Profiler gibt mir ja auch die Cover der Filme als JPG aus. Und zwar genau mit der ID als Dateinamen.

Vorher hatte ich folgende Zeile, um das Bild aufzurufen:
PHP:
<img class='cover' src='cover/{$dvd->ID[0]}.jpg'>

PHP:
<img class="cover" src="cover/<xsl:value-of select="ID"/>.jpg">
Gibt mir aber eine Fehlermeldung aus. Warum ist ja klar. Aber wie muss die Zeile, bzw. der Code bei XSLT aussehen?

Danke schonmal.
 
Ich habs hinbekommen mit
Code:
<xsl:element name="img">
<xsl:attribute name="src">cover/<xsl:value-of select="ID"/>.jpg</xsl:attribute>
<xsl:attribute name="class">cover</xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="Title"/></xsl:attribute>
</xsl:element>

Vielen Dank nochmal.
 
Zurück