PHP / Tipps / XML-Datei erstellen, Inhalte auslesen und suchen

von: Werner Zenk

Um ein XML-Dokument zu erstellen benötigt man nur einen Texteditior, wie etwa Notepad. Mit XML können Sie eigene Tags erstellen. Diese Tags sind gültig, sofern die Syntax korrekt ist.
In den folgenden Beispielen, möchte ich Ihnen zeigen wie man ein Inhaltsverzeichnis für eine Website erstellen kann.


Beispiel einer XML-Datei: (data.xml)
<?xml version="1.0" encoding="ISO-8859-1" ?>

<ROOT>
 <IDEM>
  <pubDate>8.2.2011</pubDate>
  <LINK>demolink1.htm</LINK>
  <NAME>Demolink 1</NAME>
  <BESCHREIBUNG>Beschreibung 1</BESCHREIBUNG>
 </IDEM>
 <IDEM>
  <pubDate>19.7.2011</pubDate>
  <LINK>demolink2.htm</LINK>
  <NAME>Demolink 2</NAME>
  <BESCHREIBUNG>Beschreibung 2</BESCHREIBUNG>
 </IDEM>
</ROOT>
Wie an der Struktur des Dokumentes erkennbar wird, ist eine feste Baumstruktur vorhanden. Sie beschreibt die Verschachtelung der einzelnen Befehle. Das sogenannte Wurzelelement ist <ROOT> </ROOT>. Es ist das erste Element, welches den kompletten Datensatz umringt. Diesem Wurzelelement sind weitere Elemente untergeordnet.

Beachten Sie die Großschreibung der XML-Tags.
Außerdem muß jeder geöffnete XML-Tag wieder geschlossen werden.

 

Tipp: Wenn Sie testen möchten ob Ihre XML-Datei richtig funktioniert, dann
geben Sie den Pfad zur Datei im Browser Firefox ein. Es sollte dann die erstellte
Datei ohne Fehlermeldung ausgegeben werden.

 

XML-Datei über PHP auslesen und anzeigen

Die Ausgabe in HTML erfolgt in diesem Beispiel mit einer Definitionsliste.


Quelltext:xml.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html>
 <head>
  <title>XML-Datei auslesen und anzeigen</title>
 </head>
<body>

<?php
$daten 
file_get_contents("data.xml"); // Datei einlesen
$daten explode("<IDEM>$daten); // Inhalt in ein Array zerlegen

for ($zaehler 1$zaehler < count($daten); $zaehler++) {
 
preg_match("~<pubDate>(.*)</pubDate>~" $daten[$zaehler] , $datum); // Datum auslesen
 
preg_match("~<LINK>(.*)</LINK>~" $daten[$zaehler] , $link); // Link auslesen (wird in $link[1] gespeichert)
 
preg_match("~<NAME>(.*)</NAME>~" $daten[$zaehler] , $name); // Name u. Beschreibung auslesen
 
preg_match("~<BESCHREIBUNG>(.*)</BESCHREIBUNG>~" $daten[$zaehler] , $beschreibung);

 
// Link Name und Beschreibung in HTML-Tags einbauen und ausgeben
 
echo "<dl>\n";
 echo 
<dt>$datum[1] . " - <a href='trim($link[1]) . "'>$name[1] . "</a> </dt>\n";
 echo 
<dd> " $beschreibung[1] . </dd>\n";
 echo 
"</dl>\n";
}
?>

</body>
</html>

 

In einer XML-Datei nach einem Suchbegriff suchen

Besonders schnell ist die folgende Suchfunktion, da diese keine großen Seiten mit vielen HTML-Tags durchsuchen muß. Dabei muß beachtet werden, das möglichst viele Stichwörter zur Datei, im XML-Tag <BESCHREIBUNG> vorhanden sind.

Beispiel:
<BESCHREIBUNG>Fußballergebnisse der Saison 2011/2012
und eine Tabelle der Mannschaftsaufstellungen
</BESCHREIBUNG>

Da die Suchfunktion nicht zwischen Groß.- und Kleinschreibung unterscheidet und Wortanfänge außer acht lässt, bekommt man gute Suchergebnisse wenn man nach Suchbegriffen wie zum Beispiel aufstellungen, ergebnisse oder Saison sucht.

Quelltext:xml_suche.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<!DOCTYPE html>
<html>
 <head>
  <title>In einer XML-Datei nach einem Suchbegriff suchen</title>
 </head>
<body>

<form action="<?php echo $_SERVER["SCRIPT_NAME"?>" method="post">
 Suchbegriff: 
 <input type="text" name="suchbegriff">
 <input type="submit" value="Suche">
</form>

<?php
// Hier die zu durchsuchenden Dateien eintragen
$xml_dateien = array(
"data.xml",
"data2.xml",
);

// Überprüfen ob über POST gesendet wurde
if ($_SERVER["REQUEST_METHOD"] == "POST") {

 
// Überprüfen ob der Suchbegriff mindestens 3 Zeichen enthält
 
if (strLen($_POST["suchbegriff"]) > 2) {

  
$suchergebnis ""// Hier werden die Suchergebnisse gespeichert
  
$suchergebniszahl 0// Zähler für die Suchergebnisse

  
for ($zaehler 0$zaehler < count($xml_dateien); $zaehler++) {
   
$inhalt file_get_contents($xml_dateien[$zaehler]); // Datei einlesen
   
$inhalt explode("<IDEM>$inhalt); // Inhalt in ein Array zerlegen

   
for ($inhaltszaehler 0$inhaltszaehler < count($inhalt); $inhaltszaehler++) {
    
// Inhalt mit dem Suchbegriff überprüfen
    
if (stristr($inhalt[$inhaltszaehler], $_POST["suchbegriff"]) == true) {
     
// Datum, Link, Name und Beschreibung auslesen
     
preg_match("~<pubDate>(.*)</pubDate>~" $inhalt[$inhaltszaehler] , $datum);
     
preg_match("~<LINK>(.*)</LINK>~" $inhalt[$inhaltszaehler] , $link);
     
preg_match("~<NAME>(.*)</NAME>~" $inhalt[$inhaltszaehler] , $name);
     
preg_match("~<BESCHREIBUNG>(.*)</BESCHREIBUNG>~" $inhalt[$inhaltszaehler] , $beschreibung);
     
$suchergebnis .= $datum[1] . " - "// Datum wird eingefügt
     
$suchergebnis .= "<a href='trim($link[1]) . "'>"// Link wird eingefügt
     
$suchergebnis .= $name[1] . "</a>"// Name wird eingefügt
     
$suchergebnis .= " - " $beschreibung[1] . "<br>\n" // Beschreibung wird eingefügt
     
$suchergebniszahl++; // Zähler wird erhöht
    
}
   }
  }
  
// Ausgabe des  Suchergebnisses
  
if ($suchergebniszahl == 0) {
   echo 
"<b>Leider nichts gefunden!</b>";
  }
  else {
   echo 
"" . ($suchergebniszahl > 1) ? "<b>Es wurden $suchergebniszahl Seiten gefunden:</b><br>"
    
"<b>Es wurde eine Seite gefunden;</b><br>";
   echo 
$suchergebnis;
  }
 }
}
?>

</body>
</html>
    Und Ihre Meinung?
      Sie vermissen auf dieser Seite wichtige Informationen oder haben Hinweise für uns?
Kommentare: 9 » aufmachen   
Schiwi:
Sowas suchte ich schon seit tagen, jetzt fand ich es durch zufall: Ein ganz einfaches script zum xml dateien auslesen, Danke!

Michael:
Super Seite, sofort zu Favoriten hinzugefügt, genau das was ich suchte

Marv:
Das Script ist sehr sehr gut geworden.. hat mir echt doll geholfen. Danke dafür =)

Mario:
Na das ist ja mal eine tolle Anleitung. Viel besser als die, welche ich bisher gefunden habe...

Jens:
Für kleine XML-Dateien ist dieses Script sicherlich nicht schlecht. Möchte man jedoch größere Datenmengen parsen (in meinem Fall über 9000 Datensätze) sollte doch schon mit dem PHP-XML Parsern gearbeitet werden!

Werner:
Upps, die Site ist schon einige Jahre alt PHP wurde inzwischen weiterentwickelt. Für PHP/XML gibt es etliche Funktionen die das lesen und bearbeiten einfacher machen wie zum Beispiel SimpleXML und das Document Object Model.

Markus:
tolle Seite - nicht umsonst bei google weit oben gelistet! werde die scripts gleich ausprobieren!!Danke!

Jobradio:
ist ein gute hilfe, nur wie parst man die dateien, wenn die xml etwas mehr an inhalt hat, z. B. <?xml version="1.0"?><radio> <clients> <client name="winamp">1</client> </clients></radio>wobei der Name des Clients und die anzahl ausgegeben werden soll.

Dj Dojo:
Erst einmal vielen Dank für die verständliche Hilfe. In dem Item-Bereich ist es ja auch noch möglich, <pubDate>Datum des Items</pubDate> einzubauen. Ich würde mich sehr freuen, wenn ihr vielleicht nochmal schreiben könntet, ob bzw. wie es möglich ist, das auslesen auch nach Datum zu sortieren, wenn man eben pubDate verwendet.

Werner:
Ich habe die Seite überarbeitet und dabei auch den Tag pubDate hinzugefügt.

Helmar:
In der Überschrift steht XML Datei schreiben - das suche ich, da ich den Inhalt einer Datenbank in XML weiter schicken soll.
Hilfe finden Sie im » netzgemein.de - Forum. Auch als „Gast” können Sie dort Fragen stellen!  
 Das könnte Sie interessieren:
Anzeigedauer des Inhalts auf einen bestimmten Zeitraum pro Tag begrenzen  Verzeichnisse oder Dateien auf Schreibrechte prüfen  Wochenende!  Inhalt immer frisch vom Server holen  Backlink Checker - Hiermit kann man überprüfen ob die eigene Homepage auf einer anderen Seite verlinkt wird.  Text kontinuierlich mit einer for-Schleife zoomen  Zeitansage - Dieses Script gibt die aktuelle Uhrzeit in Worten aus.  RSS Leser - Der RSS Leser liest RSS Feeds von anderen Webseiten aus und zeigt diese strukturiert auf der Seite an. Der ausgewählte Feed wird über AJAX zurück an den Browser gesendet, so können Feeds gelesen werden ohne die Seite neu laden zu müssen.  PHP Archiv - Hier finden Sie PHP-Scripte für die Homepage zum herunterladen.  Entfernen und ersetzen  …mehr
© 2000-2012 Homepage-Total.de Kontakt - Impressum - Banner