xmlparser - elemente in ein array bringen
venty
- php
Hi!
Ich lese gerade eine xml mit dem XML Parser ein. Dabei versuche ich alle elemente (<port>) in ein array zu bringen.
case 'PORT':
$this->route[] .= htmlentities($this->value, ENT_QUOTES, 'UTF-8');
break;
dieses Array stellt die route eines schiffes da. Bevor ich es abspeichere fühge ich das array in einen string zusammen.
$this->route = implode(' <img src=\"image.png\" /> ', $route);
eigenartiger weise wird das bild aber auch bei Umlauten und anderen Sonderzeichen eingefügt.
zB: Mah<img src="image.png" />ón
weiß jemand warum?
Hallo,
du kennst phps simple-xml-funktionen?
Gruß
jobo
du kennst phps simple-xml-funktionen?
Ja schon, aber das xml ist zu groß ... viel zu groß (242MB) ;)
war mein erster Versuch mit simplexml aber da bricht apache ab.
danke trotzdem
Hallo,
du kennst phps simple-xml-funktionen?
Ja schon, aber das xml ist zu groß ... viel zu groß (242MB) ;)
war mein erster Versuch mit simplexml aber da bricht apache ab.
naja, vielleicht kanst du ja die max_execution_time hochsetzen. außerdem brauchst du für xml/php ja kein apache, wenn du nicht immer mit dieser datei hantieren musst.
Gruß
jobo
naja, vielleicht kanst du ja die max_execution_time hochsetzen. außerdem brauchst du für xml/php ja kein apache, wenn du nicht immer mit dieser datei hantieren musst.
mache ich schon, es geht von der größe her nicht. SimpleXML validiert die xml beim einlesen und liest somit die ganze datei ein. Dabei bricht der apache dann ab weil (normalerweise) man diesem nicht soviel speicher gibt.
aber das ist auch nicht das eig problem. Irgendwie muss es ja gehn den xml parser zu verwenden.
LG
Hallo,
aber das ist auch nicht das eig problem.
Naja, es würde das lösen, denn simplexml kann ja in ein array/objekt transferieren bzw. beherrscht xpath mit entsprechende rückgabe als array/objekt.
Irgendwie muss es ja gehn den xml parser zu verwenden.
machs doch nacheinander:
1. das array überhaupt befüllen
2. deine implodefunktion mit einbauen, wenn dir 1. gelungen ist.
s. a. meine zweite antwort auf dein o.p..
Gruß
jobo
- das array überhaupt befüllen
case 'PORT':
$this->route[] .= $this->value;
break;
- deine implodefunktion mit einbauen, wenn dir 1. gelungen ist.
$this->route = implode(' <img src=\"'.$img_url.'\" /> ', $route);
s. a. meine zweite antwort auf dein o.p..
genau so wirds gemacht ;)
Hallo,
- das array überhaupt befüllen
case 'PORT':
$this->route[] .= $this->value;
break;
> > 2. deine implodefunktion mit einbauen, wenn dir 1. gelungen ist.
> ~~~php
$this->route = implode(' <img src=\"'.$img_url.'\" /> ', $route);
>
s. a. meine zweite antwort auf dein o.p..
genau so wirds gemacht ;)
Naja, wenn du meinst. Wo testest du deine Annahmen (was soll rauskommen, was kommt raus)? Da fehlt dann mindestens dazwischen ein var_dump() von der relevanten Variable. Du willst doch schauen, ob bis dahin alles nach Deinen Vorstellungen verlaufen ist. Wenn du das nicht kontrollierst, kannst Du etwaige "Fehler" in Schritt zwei ja u.U. garnicht nachvollziehen.
Gruß
jobo
Hallo,
Hi!
Ich lese gerade eine xml mit dem XML Parser ein. Dabei versuche ich alle elemente (<port>) in ein array zu bringen.
case 'PORT':
$this->route[] .= htmlentities($this->value, ENT_QUOTES, 'UTF-8');
break;
Warum .= ? Funktioniert das überhaupt so?
>
> dieses Array stellt die route eines schiffes da. Bevor ich es abspeichere fühge ich das array in einen string zusammen.
>
> `$this->route = implode(' <img src=\"image.png\" /> ', $route);`{:.language-php}
>
> eigenartiger weise wird das bild aber auch bei Umlauten und anderen Sonderzeichen eingefügt.
was haben denn die sonderzeichen mit implode zu tun?
Gruß
jobo
Warum .= ? Funktioniert das überhaupt so?
Nehme ich an. als ich das ohne gemacht hab, kahmen so sachen wie:
array(
[0] => Isla,
[1] => nd)
was haben denn die sonderzeichen mit implode zu tun?
Das wüsste ich auch gerne!
Es könnte natürlich auch sein das es bei Sonderzeichen einfach ins nächste array-element übergeht.
Hallo,
Warum .= ? Funktioniert das überhaupt so?
Nehme ich an. als ich das ohne gemacht hab, kahmen so sachen wie:
array(
[0] => Isla,
[1] => nd)
>
> > was haben denn die sonderzeichen mit implode zu tun?
>
> Das wüsste ich auch gerne!
>
> Es könnte natürlich auch sein das es bei Sonderzeichen einfach ins nächste array-element übergeht.
Der Trick ist, das Problem in seine atomaren Bestandteile zu zerlegen. Nimm eine ganz lütte xml-Datei und versuche drei oder vier werte daraus in ein Array zu packen. Erst wenn du das (ohne implode und sonderzeichen) geschafft hast, kümmer dich um den nächsten Einzel(!)-Schritt.
Gruß
jobo
wie meinst du das?
was meinst du mit lütte? simpel/einfach?
LG
Hallo,
wie meinst du das?
was meinst du mit lütte? simpel/einfach?
einfach ein kleine Testdatei mit drei-vier einträgen. Ein Testumfeld eben. In dem du die Probleme nicht zeitlich nacheinander im selben Script abarbeitest sondern getrennt voneinander.
Gruß
jobo
Hab grad mit meinem kunden telefoniert
sein admin erlaubt ihm 2048MB arbeitsspeicher zu belegen
dh ich kann doch simplexml verwenden. HURA!
ich würde aber doch noch gerne eine Lösung zum problem finden. Wird sicher nicht das letzte mal sein das ich einen xmlparser schreiben muss :S
LG
Hallo,
ich würde aber doch noch gerne eine Lösung zum problem finden. Wird sicher nicht das letzte mal sein das ich einen xmlparser schreiben muss :S
http://www.google.de/search?q=php+xml+parser+array ???
Schönes Wochenende.
Gruß
jobo
Hi!
Ich lese gerade eine xml mit dem XML Parser ein. Dabei versuche ich alle elemente (<port>) in ein array zu bringen.
case 'PORT':
$this->route[] .= htmlentities($this->value, ENT_QUOTES, 'UTF-8');
break;
>
> dieses Array stellt die route eines schiffes da. Bevor ich es abspeichere fühge ich das array in einen string zusammen.
>
> `$this->route = implode(' <img src=\"image.png\" /> ', $route);`{:.language-php}
Inwieweit hängen diese beiden Code-Stücke zusammen - im ersten befüllst du $this->route, im zweiten liest du $route aus - und wie sollen sie ein Problem nachvollziehbar machen, wenn darin Variablen vorkommen, die irgendwo anders mit Werten belegt wurden? Zusatzfrage: Welche Funktion erfüllt htmlentities() an dieser Stelle?
> eigenartiger weise wird das bild aber auch bei Umlauten und anderen Sonderzeichen eingefügt.
Nun, dann wäre als erstes eine Kontrollausgabe fällig. In der würdest du sehen, dass die betreffende Stelle zwei Einträge in $this->route belegt. Nun könnte man auf die Idee kommen, dass schon beim Einfügen in das Array zwei Aufrufe erfolgen. Und wie beziehungsweise in welcher Situation wird die Einfügestelle aufgerufen? Wenn der XML-Parser die Handler-Callback-Funktion aufruft. Daraus könnte man schließen, dass Entitys und NCRs anders behandelt werden als normaler Text. Also müsste man mal in dieser Richtung das PHP-Handbuch befragen - speziell: alle Handler anschauen und sich kurze XML-Text nachbilden, an denen man das Verhalten des XML-Parsers probieren und studieren kann.
Lo!