Probleme beim parsen (PHP4)

Breuker

Erfahrenes Mitglied
Hallo!

Wie die überschrift schon sagt, habe ich Probleme eine XML-Datei in PHP 4 zu parsen.
Das parsen ist dabei eigentlich nicht das eigentliche Problem.
Eine XML-Datei nach folgendem Beispiel kann ich ohne probleme auslesen:

Code:
<?xml version="1.0"?>
<meta>
<news-titel>Problem</news-titel>
<news-inhalt>Text</news-inhalt>
</meta>

Nun habe ich ein Programm, dass eine XML Datei erstellt. Diese XML Datei besitzt aber Doppelpunkte...

Beispiel:

Code:
<?xml version="1.0"?>
<meta>
<news:titel>Problem</news:titel>
<news:inhalt>Text</news:inhalt>
</meta>

Diese kann ich mit meinem PHP4 Parser leider nicht auslesen :(
Auf was muss ich dabei achten, damit ich dies kann?

Breuker
 
Hi.

Das Problem ist, das du dort einen XML Namespace verwendest, den du aber nicht deklariert hast. Der Doppelpunkt sollte möglichst nicht in einem Attribut bzw. Tagnamen verwendet werden.

Was du machen kannst ist entweder den Namespace zu deklarieren oder die Doppelpunkte nicht zu verwenden.

Gruß
 
Fülle Dein Inhalt in eine Datei und nenne diese testt.xml
Dann diesen code ausführen:

$data = implode("",@file("testt.xml"));
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$data,$values);
// hhier am besten mit einer foreach-schleife alle relevanten inhalte auslesen
echo '<pre>';
print_r($values);

Damit sollte es funktionieren. Brauchst dann nur noch die einzelnen Arrays auslesen.

ps: was verwendest Du denn als 'paerser' ... ?
 
@ takvorian:

Danke, das hat mir sehr geholfen! Wie lesen ich den die Arrays aus, ich bin in XML leider (noch) ein :(

Breuker
 
Zuletzt bearbeitet:
um das Prinzip zu kapieren, füge dieses Schleifchen anstelle der Kommentarzeile oben in den codeschnipsel rein:

foreach($values as $val)
{
echo $val[tag].'<br>';
echo $val[type].'<br>';
echo $val[level].'<br>';
echo $val[value].'<hr>';
}

wie so vieles ... ziemlich simpel.
 
Danke :D :D :D

und nun eine letzte Frage: Wie kann ich einen bestimmten Array (z.B. den fünften) gezielt auslesen?

Breuker
 
Du kannst Dich wntweder am Inhalt der Arrays orientieren, oder an der Anzahl. Ich empfehle Dir aber innerhalb des foreach keine Ausgaben stdout-Ausgaben zu machen, sondern die Werte, die Du brauchst zu sammeln und später komplett auszugeben:

Probiers mal damit:

foreach($values as $val)
{
$tmp[]=$val;
$result=count($tmp);

if($result==1)
{
echo $result.'<br>';
echo $val[tag].'<br>';
echo $val[type].'<br>';
echo $val[level].'<br>';
echo $val[value].'<hr>';
} elseif($result==2)
{
echo $result.'<br>';
echo $val[tag].'<br>';
echo $val[type].'<br>';
echo $val[level].'<br>';
echo $val[value].'<hr>';
}
}
 
ich bins doch noch mal :(

beim programmieren bin ich jetzt auch ein Problem gestoßen: ich benötige für ein exaktes finden meiner information den spaltennamen (Bsp.: $val['news:titel'] oder so).

Wie mache ich das :confused:
 
du hast z.b. solch ein 2dimensionales array:

Code:
    [23] => Array
        (
            [tag] => item
            [type] => open
            [level] => 2
            [attributes] => Array
                (
                    [rdf:about] => http://www.akhdfkajhdask.dsadkjadkshdhd.cciekjdk.de/da/isses/
                )

        )

dann holst Du zuerst alle "rdf:about"-Inhalte in ein anderes array innerhalb der foreach:

Beispiel:

Code:
  if(isset($val['attributes']['rdf:about'])) { $rdfabout[$i]=$val['attributes']['rdf:about']; $i++;}

dieses "$rdfabout[]" wird mit dem jeweiligen Inhalt aufgefüllt ($i als Zähler nicht vergessen)
und den ihalt kannst du schnell mit einer for-Schleife auslesen oder in eine gewünschte
Form bringen, oderoderoder ...

Code:
    for($hlp=0;$hlp<$i;$hlp++) { echo $hlp.':  '.$rdfabout[$hlp].'<hr>'; }

das sollte funktionieren ---
 
Zurück