Probleme mit XML und des Parsers (PHP4)
Hallo,
wenn ich in einer XML-Datei eine String zb. "Das ist eine [DEMO] jetzt"
habe so wird mir nur "] jetzt" ausgegeben. Warum?! Wie kann ich das
beheben?!
hier der Code:
$result = array();
$currRow = 0;
function startElement($parser, $name, $attrs)
{
global $currTag, $currRow;
$currTag = $name;
}
function endElement($parser, $name) {
global $currRow;
if ($name == "ITEM")
$currRow++;
}
function characterData($parser, $tagData) {
global $result, $currRow, $currTag;
$tagData = trim($tagData);
if ($tagData != '')
$result[$currRow][$currTag] = $tagData;
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = [at] fopen($xml_file, "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096))
{
if (!xml_parse($xml_parser, $data, feof($fp)))
{
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
Re: Probleme mit XML und des Parsers (PHP4)
Hans Schütt schrieb:
> Hallo,
>
> wenn ich in einer XML-Datei eine String zb. "Das ist eine [DEMO] jetzt"
> habe so wird mir nur "] jetzt" ausgegeben. Warum?! Wie kann ich das
> beheben?!
>
> hier der Code:
>
>
> $result = array();
> $currRow = 0;
>
> function startElement($parser, $name, $attrs)
> {
> global $currTag, $currRow;
> $currTag = $name;
> }
>
> function endElement($parser, $name) {
> global $currRow;
>
> if ($name == "ITEM")
> $currRow++;
> }
>
> function characterData($parser, $tagData) {
> global $result, $currRow, $currTag;
>
> $tagData = trim($tagData);
> if ($tagData != '')
> $result[$currRow][$currTag] = $tagData;
Das ist weil du für die gleiche Zeile hier mehrere Werte bekommst, du
überschreibst quasi die Daten von vorher mit dem jeweils letzten.
Änderst du das z.B. in:
$result[$currRow][$currTag].=$tagData;
Sollte das Richtige da drin stehen.
Was mir gerade noch auffällt, wenn dein XML komplett von einem ITEM tag
umschlossen wird mit mehreren gleichen Tags innerhalb funktioniert das
mit deinem Array von Zeile und Tag auch nicht mehr richtig?!
Bis denn dann
Dieter
>...
Re: Probleme mit XML und des Parsers (PHP4)
> Das ist weil du für die gleiche Zeile hier mehrere Werte bekommst, du
> überschreibst quasi die Daten von vorher mit dem jeweils letzten. Änderst du
> das z.B. in:
>
> $result[$currRow][$currTag].=$tagData;
>
> Sollte das Richtige da drin stehen.
>
> Was mir gerade noch auffällt, wenn dein XML komplett von einem ITEM tag
> umschlossen wird mit mehreren gleichen Tags innerhalb funktioniert das mit
> deinem Array von Zeile und Tag auch nicht mehr richtig?!
ja, es ist nun richtig!
nun geht alles hervorragend!
Danke