mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 10.12.2016 10:15 Benutzername: Passwort: Auto-Login

Thema: XML in PHP einlesen (parsen) und Inhalte ausgeben. vom 29.03.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> XML in PHP einlesen (parsen) und Inhalte ausgeben.
Seite: Zurück  1, 2, 3, 4, 5  Weiter
Autor Nachricht
Account gelöscht


Ort: -
Alter: -
Verfasst Di 29.03.2005 13:16
Titel

Antworten mit Zitat Zum Seitenanfang

Das Skript funktioniert doch so wie ich es umgewandelt habe? warte...

doch funzt (???) wo liegt das problem, du musst einfach nur die elementhandler-funktionen um die entsprechenden elemente erweitern (die switch-sachen)


Zuletzt bearbeitet von am Di 29.03.2005 13:22, insgesamt 1-mal bearbeitet
 
gtz

Dabei seit: 15.04.2002
Ort: -
Alter: 41
Geschlecht: Männlich
Verfasst Di 29.03.2005 13:18
Titel

Antworten mit Zitat Zum Seitenanfang

ohne jetz weiteres anzugehn, kann mir ma jemand erklärn, wozu das hier gut sein soll?

Code:

 switch (strtolower($ID))
 {
  case "ID":
  $ausgabe .="</a>";
 }
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 33
Geschlecht: Männlich
Verfasst Di 29.03.2005 13:22
Titel

Antworten mit Zitat Zum Seitenanfang

letztere habe ich schon gelöscht.

momentaner Code

Code:


<?php

function cdata($parser, $inhalt)
{
   global $ausgabe;
   
   $ausgabe .= $inhalt;
}

function Produktgruppen($parser, $name, $atts)
{
   global $ausgabe;
   
   switch (strtolower($ID))
   {
      case "content":
      $ausgabe .="<h2>".$atts["Inahlt"]."</h2>";
      break;
      
      case "Produktgruppe":
      $ausgabe .="<h2>".$atts["PRODUKTGRUPPE"]."</h2>";
      break;
      
      default:
      $error = "Undefiniertes Element <".$name.">";
      die ($error . " in Zeile " . xml_get_current_line_number($parser));
      break;
   }
}


$file = "http://www.uk-consult.de/content/contentmanagement/content2xml.asp?num=18661";

$parser = xml_parser_create();

xml_set_element_handler($parser, "Produktgruppen","Produkte");
xml_set_character_data_handler($parser, "cdata");

$file = implode('',file($file));

if (!xml_parse($parser, $file)) {
  echo xml_error_string(xml_get_error_code($parser));
}

xml_parser_free($parser);

echo $ausgabe;


?>

habe bis jetzt noch nie was mit XML gemacht.
  View user's profile Private Nachricht senden
Account gelöscht


Ort: -
Alter: -
Verfasst Di 29.03.2005 13:23
Titel

Antworten mit Zitat Zum Seitenanfang

MEIN GOTT DAS FUNKTIONIERT!!!!! DIE SWITCH ANWEISUNG FÄNGT DIE ELEMENTNAMEN AB!!!!!

Code:
<?php

function cdata($parser, $content)
{
  global $ausgabe;

  $ausgabe .=$content;
}

function StartProduktgruppen($parser, $ID, $Name)
{
  global $ausgabe;
 
  switch ($ID) { //strtolower natürlich schwachsinn hier
    case "ID":
      $ausgabe .="<a href=\"#".$ID["ID"]."\">";
    break;

    case "NAME":
      $ausgabe .= "<h1>".$Name["Name"]."</h1>";
    break;
    /******************************************/
    // HIER DEN ELEMENTHANDLER ERWEITERN!!!!!!!
    /******************************************/
    default:
      $error = "Undefiniertes Element <b>&lt;".$ID."&gt;</b>";
      die ($error . " in Zeile " . xml_get_current_line_number($parser));
    break;
  }
}

function EndProduktgruppen($parser, $ID)
{
  global $ausgabe;
 
  switch (strtolower($ID)) {
    case "ID":
      $ausgabe .="</a>";
  }
}

$file = "http://www.uk-consult.de/content/contentmanagement/content2xml.asp?num=18661";

$parser = xml_parser_create();

xml_set_element_handler($parser, "StartProduktgruppen", "EndProduktgruppen");
xml_set_character_data_handler($parser, "cdata");
$file = implode('',file($file));

$file = str_replace("<?xml version=\"1.0\"?>\r", "", $file);
//echo htmlentities($file);
//$file ="<p>test</p>";
if (!xml_parse($parser, $file)) {
  echo xml_error_string(xml_get_error_code($parser));
}

xml_parser_free($parser);

echo $ausgabe;

?>


Zuletzt bearbeitet von am Di 29.03.2005 13:24, insgesamt 1-mal bearbeitet
 
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 33
Geschlecht: Männlich
Verfasst Di 29.03.2005 13:44
Titel

Antworten mit Zitat Zum Seitenanfang

ja ich bin zu blöd.

wieso in der switch anweisung keine umwandlung in kleinbuchstaben?
ich habe mir div. beispiele angeschaut wo das auch dort gemacht wurde.
ansonsten in der funktion wo die daten gelesen werden.

ja und, die ELEMENTHANDLER zu erweitern bereitet mir auch schwierigkeiten.
ich habe einfach ein verständnissproblem.
  View user's profile Private Nachricht senden
gtz

Dabei seit: 15.04.2002
Ort: -
Alter: 41
Geschlecht: Männlich
Verfasst Di 29.03.2005 13:49
Titel

Antworten mit Zitat Zum Seitenanfang

Kash hat geschrieben:
ja ich bin zu blöd.

wieso in der switch anweisung keine umwandlung in kleinbuchstaben?


weil du den in kleinbuchstaben umgewandelten string gleich danach auf gleichheit mit einer zeichenkette aus GROSSBUCHSTABEN prüfst. das kann man natürlich machen, aber was da rauskommen MUSS, kann man sich durchaus allumfassend vorher schon denken.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


Ort: -
Alter: -
Verfasst Di 29.03.2005 13:53
Titel

Antworten mit Zitat Zum Seitenanfang

naja, das ist eigentlihc latte, ob du die umwandelst, dann musst du die entsprechenden fälle aber auch entspr. auszeichnen.

Also von Anfang an: Ist das entspr. Flag nicht gesetzt, werden alle Element- und Attributnamen in Großbuchstaben umgewandelt (natürlich nicht deren Werte).

Diese kannst du nach gusto gerne auch wieder in Kleine Umwandeln, nur springt ein strtolower("A") natürlich nciht mehr auf die Anweisung case "A": an. verstehste? *zwinker*

Mit dem Elementhandler ists ganz einfach: Die Funktionen wurden dem Parser als die "für öffnende, für schließende und für CDATA-Abschnitt Zuständige zugewiesen (mit set_element...).

Nun werden diese Funktionen automatisch bei jedem Element, dass der SAX-Parser "trifft", aufgerufen (callback-Funktion). Mit den übergebenen Parametern kannst du nun spielen.

in der Switch-Anweisung wird einfach nur der elementname abgefragt.
Code:
case "ID":
      $ausgabe .="<a href=\"#".$ID["ID"]."\">";
break;


macht nichts anderes, als aus dem Element <id>, im Parser intern "ID", die Stringausgabe <a href="ID-Wert"> zu konstruieren.

Spiel einfach mit den Werten und schaue, was den Funktionen so alles übergeben wird, auf was du alles wie zugreifen kannst.

Willst du den Parser auch mal unterbrechen, rekursive mehrfachaufrufe starten o.Ä., bietet es sich an, eine XML-Parser Klasse zu schreiben und direkt auf die Funktion "xml_parse_into_struct" zurückzugreifen, die dir den ganzen XML-Baum als Mehrdimensionales Array zur verfügung stellt.
 
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 33
Geschlecht: Männlich
Verfasst Di 29.03.2005 14:03
Titel

Antworten mit Zitat Zum Seitenanfang

ich verstehe schon besser.
aber ein konkretes Beispiel für mein Problem mit dazugehöriger Ausgabe wären ein gutes Beispiel womit ich sicher einfacher Arbeiten könnte.

Ihr wißt ja wie der XML Baum ausschaut. Ich habe da die Produktgruppen mit den einzelnen Produkten.
Ich möchte am Anfang erstmals nur alle verfügbaren Produktgruppen angezeigt lassen bekommen.
Da ich dies ja in <a href einbinde werden diese ja als Links wiedergegeben.

Sobald dann einer dieser Links geklickt wird ( also eine Produktgruppe ) soll der dazugehörige Inhalt angezeigt werden.
  View user's profile Private Nachricht senden
 
Ähnliche Themen [PHP]Problem bei Parsen vom XML-Daten
PHP -> XML Parsen - Pro Zeile jeweils 3 Ausgaben!
Datensatz einbinden, ausgeben (XML oder/und php?)
In PHP: XML File mit XMLReader auslesen -> Excel ausgeben
xml laden und parsen in *.as
XML mit Javascript parsen
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  1, 2, 3, 4, 5  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.