[PHP&XML] - XML Datei korrekt verarbeiten
Andrea
- php
0 Andrea0 Sascha Mux0 Andrea
0 Ingo Turski
0 Sascha Mux
Hi alle zusammen,
ich hab folgendes Problem, ich würde gern eine xml Datei mit folgendem
Inhalt nutzen:
<?xml version='1.0'?>
<autos>
<Baujahr2000>
<BMW>
3er
5er
7er
</BMW>
<Audi>
6er
8er
</Audi>
<SpecialCars>
Porsche Cayenne
BMW X3
</SpecialCars>
</Baujahr2000>
<Baujahr2001>
...usw...
</Baujahr2001>
</autos>
Nun möchte ich mit php und dem xmlparser gern die gewünschen Baujahrgänge
und vorselektierten Hersteller, z.B. BMW auslesen, ohne die ganze xml Datei
vorher in ein Array zu schreiben, aller xml_parse_into_struct()
Is es möglich folgende Ausgabe zu erreichen:
Anfang Baujahr: Baujahr2000
Anfang Hersteller: BMW
Modelle:3er,5er,7er
Ende Hersteller
Ende Baujahr
Und wenn ja, wie denn nur???? ;o)
Bin echt schon lange am suchen und bin auch über die "xml_set_element_handler()" und "xml_set_character_data_handler()"
gestolpert, aber entweder ich bekomme alle Tags und danach alle Datablöcke oder es klappt nichts... :o(
Wäre jemand so freundlich und könnte mir einen Anstoß geben ;o)
Vielen Dank und liebe Grüße,
Andrea
Ups, ich nochmal ;o)
und es sollt unter php 4 und 5 laufen...
und ich würd gern auf apis wie dom oder simple-xml verzichten...
und, und, und... ;o)
Danke und Grüße,
Andrea
Hallo,
Ups, ich nochmal ;o)
und es sollt unter php 4 und 5 laufen...
und ich würd gern auf apis wie dom oder simple-xml verzichten...und, und, und... ;o)
Willst du programmieren oder nicht?
(http://forum.de.selfhtml.org/?t=167753&m=1094356)
Bis bald,
Sascha
Morgen zusammen,
danke für die vielen Antworten!!!
ich glaub ich werd es mal mit <model>3er</model>
probieren und doch die handler nehmen...
Ich hab auch gestern abend noch ein bißchen rumgespielt und folgenden code getestet:
<?php
class xml
{
var $parser;
function xml()
{
$this->parser = xml_parser_create();
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, "tag_open", "tag_close");
xml_set_character_data_handler($this->parser, "cdata");
}
function parse($data)
{
xml_parse($this->parser, $data);
}
function tag_open($parser, $tag, $attributes)
{
echo("--> tag_open start: <br>");
var_dump($parser, $tag, $attributes);
echo("<br>--> tag_open end: <br><br>");
}
function cdata($parser, $cdata)
{
echo("--> cdata start: <br>");
var_dump($parser, $cdata);
echo("<br>--> cdata end: <br><br>");
}
function tag_close($parser, $tag)
{
echo("--> tag_close start: <br>");
var_dump($parser, $tag);
echo("<br>--> tag_close end: <br><br>");
}
} // end of class xml
$xml_parser = new xml();
$xml_parser->parse("<A ID='a1'>Text A</A>");
?>
Folgende Fragen:
Die Klasse heißt xml, aber wo zum Teufel wird denn die funktion xml aufgerufen, bin ich blind? ;o)
Und wie kann ich das so modifizieren, dass ich eine xml datei mit mehreren Einträgen nutzen kann???
Über wieder so zahlreiche Einträge würd ich mich freuen...
Liebe Grüße
Hallo,
<?php
class xml
{
var $parser;function xml()
{
$this->parser = xml_parser_create();
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, "tag_open", "tag_close");
xml_set_character_data_handler($this->parser, "cdata");
}
Die Klasse heißt xml, aber wo zum Teufel wird denn die funktion xml aufgerufen, bin ich blind? ;o)
Oben.
Und wie kann ich das so modifizieren, dass ich eine xml datei mit mehreren Einträgen nutzen kann???
Du musst PHP sagen was er mit dem Inhalt von $tag machen soll.
Mach dir die Mühe und lese das Handbuch zu diesen Funktionen.
Bis bald,
Sascha
Hi,
und es sollt unter php 4 und 5 laufen...
und ich würd gern auf apis wie dom oder simple-xml verzichten...
dann ran ans programmieren. Ist gar nicht so schwer, zumal wenn Du das Datenformat fest vorgibst, brauchst Du gar keinen vollwertigen xml-Parser zu basteln, sondern kommst auch noch mir einfachen Stringfunktionen aus.
freundliche Grüße
Ingo
Hallo,
Nun möchte ich mit php und dem xmlparser gern die gewünschen Baujahrgänge
und vorselektierten Hersteller, z.B. BMW auslesen, ohne die ganze xml Datei
vorher in ein Array zu schreiben, aller xml_parse_into_struct()
Schau dir xml_set_element_handler() an.
Anmerkung:
Inhalt nutzen:
<BMW>
3er
5er
7er
</BMW>
<Audi>
6er
8er
</Audi>
Diese Weise finde ich problematisch: Setze die Bauarten lieber in weitere Elemente, da mit das XML wohlgeformt ist.
<BMW>
<model>3er</model>
<model>5er</model>
<model>7er</model>
</BMW>
usw.
Es beeinflusst das Problem jedoch wenig, allerdings kannst du es dann über die Element Handler bewerktstelligen.
Achja: Danke. Du hasst mich auf eine viel bessere Idee gebracht :)
Bis bald,
Sascha
Entschuldige:
Bin echt schon lange am suchen und bin auch über die "xml_set_element_handler()" und "xml_set_character_data_handler()"
gestolpert, aber entweder ich bekomme alle Tags und danach alle Datablöcke oder es klappt nichts... :o(
hatte ich überlesen.
Es gibt allerdings kaum andere Möglichkeiten.
Vielleicht schaust du dir das Pear-Package XML_Parser an.
Ich weiß nicht ob es dein Problem löst... Ich bin selbst auch kein Profi.
Grüße,
Sascha
Hallo,
Nagut: Wenn du auf API verzichten willst musst du die Datei laden, selbst verarbeiten lassen und wieder speichern. Das wäre die einzige Möglichkeit.
Bis bald,
Sascha