rekursives foreach für XML array

Detl

Grünschnabel
Moin aus dem Norden,

ich bastel nun schon zu lange und habe viel gegoogelt - leider komme ich nicht weiter.
Problem:
PHP4.xx, XML. Die Elementennamen übernehme ich in HTML als CSS Styles.
Ich parse XML mit einem gefundenen Script und es schmeisst mit ein wunderschönes Array zurück. Nun habe ich aber Elemente, die doppelt (absatz) vorkommen und die ich mit meiner Zuordnung nicht zu fassen bekomme.
Code:
Array
(
    [content] => Array
        (
            [_c] => Array
                (
                    [thema] => Array
                        (
                            [_c] => Array
                                (
                                    [headline] => Array
                                        (
                                            [_v] => Überschrift
                                        )

                                    [subheadline] => Array
                                        (
                                            [_v] => Unterüberschrift
                                        )

                                    [bu] => Array
                                        (
                                            [_v] => Bildunterschrift
                                        )

                                    [absatz] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [_v] => Ein Absatz
                                                )

                                            [1] => Array
                                                (
                                                    [_v] => Ein zweiter Absatz
                                                )

                                        )

                                )

                        )

                )

        )

)

nun schaffe ich es die einfachen Elemente (die nur einmal vorkommen) in HTML-Code zu packen, nur bei meinen zwei Absätzen ist der Elementname ja 0 und 1.
PHP:
if(file_exists($myFile)) {
	$xml=xml2ary(file_get_contents($myFile)); // der Parser wird aufgerufen
	function print_arrayrekursive($array) {
	global $tmp;
		foreach($array as $key => $value) {
			if(is_array($value)) {
				$tmp = $key;
				print_arrayrekursive($value);
				continue;
			}
			else {
				switch($tmp) { // Zuordnung für CSS
					case 'image':	print('<img src="./img/'.$value.'" alt="'.$value.'"/>');
						break;
					case 'absatz':	print('<p><div class="'.strtoupper($tmp).'">'.$value.'</div></p>');
						break;
					default:
						print('<div class="'.strtoupper($tmp).'">'.$value.'</div>');
						break;
				} */
			}
	
		}
	}
	print_arrayrekursive($xml); 
}

Ich muss dazu sagen, dass ich kein Profi bin ;o)

Vielen Dank für Hilfe.

Detl
 
OK, eine Nacht schlafen und nun habe ich es selber hinbekommen. Damit alle was von haben:
XML Datei erstellen und wie folgt einfach in HTML mit CSS auslesen. Klappt auch mit doppelten Elementen:
PHP:
function xml2ary(&$string) {
    $parser = xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parse_into_struct($parser, $string, $vals, $index);
    xml_parser_free($parser);
	
	foreach($vals as $key => $value) {
		if (($value['type'] == 'open') OR ($value['type'] == 'complete')) {
		$myStyle   = $value['tag'];
		$myContent = str_replace('\n','<br>',$value['value']);
		switch($myStyle) {
			case 'image':	print('<img src="./img/'.$myContent.'" alt="'.$myContent.'"/>');
				break;
			case 'absatz':	print('<p><div class="'.strtoupper($myStyle).'">'.$myContent.'</div></p>');
				break;
			default:
				print('<div class="'.strtoupper($myStyle).'">'.$myContent.'</div>');
				break;
		} 

	}
	}
}
Viel Spaß

Detl
 
Zurück