PHP XML Parser unter PHP4 - sehr problematisch!!

CPU

Lieutenant
Registriert
Jan. 2006
Beiträge
704
Hallo,

ich benötige noch (also zu meinem Session-Problem, dass ich vor 2-3 Tagen hier gestellt habe) einen kleinen (oder auch großen :D) Rat zu XML.

Im Grunde sind PHP und XML sehr einfach: SimpleXML.
Dies funktioniert aber nur unter PHP5! Also habe ich mich unter Google informiert, wie man auf PHP4 XML-Skripte parst. Das Parsen muss nicht aufwendig sein, sollte aber die Grundfunktionen erfüllen.

Also habe ich mir folgendes Skript zusammengabaut:
PHP:
class Parser {


  function parser($file) {
  	
  	$str = '<?xml version="1.0"?>
<demo>
	<liste>
		<punkt id="1" type="??">Inhalt diese Punktes (1)</punkt>
		<punkt id="1" type="string(255)">Inhalt diese Punktes (2)</punkt>
	</liste>
</demo>';
  	

      $buffer = $str;

      $p = xml_parser_create();

      xml_parser_set_option($p, XML_OPTION_CASE_FOLDING, 0);
      xml_set_object($p, $this);

      xml_set_element_handler($p, 'startElement', 
                              'closeElement');

      xml_set_character_data_handler($p, 'cdataHandler');
      xml_parse($p, $buffer);
      xml_parser_free($p);

  }
    
  function startElement($parser, $name, $a) {

  	echo "START ELEMENT: " . $name ."\r\n";

  }

  function closeElement($parser, $name) {

  	echo "END ELEMENT: " . $name . "\r\n";
  	
  }

  function cdataHandler($parser, $cdata) {
    echo "CDATA: " . $cdata. "\r\n";
  }

}
Das der Einfachheit halber zuanfang ein festintegriertes XML-File parst:
HTML:
<?xml version="1.0"?>
<demo>
	<liste>
		<punkt id="1" type="??">Inhalt diese Punktes (1)</punkt>
		<punkt id="1" type="string(255)">Inhalt diese Punktes (2)</punkt>
	</liste>
</demo>

Nun schön und gut.

Doch wie gebe ich die Attribute aus (id, type)??
Also mir fehlt praktisch eine Methode um die Attribute zu "registrieren".

Außerdem: Wie sollte man vorgehen, wenn man den Inhalt einer XML-Datei in ein Array einlesen möchte??

Danke schon mal im Vorraus,
CPU :(
 
meinste sowas?

Code:
<pre>
<?php

class Parser {


  function parser($file) {
      
      $str = '<?xml version="1.0"?>
                <demo>
                    <liste>
                        <punkt id="1" type="??">Inhalt diese Punktes (1)</punkt>
                        <punkt id="1" type="string(255)">Inhalt diese Punktes (2)</punkt>
                    </liste>
                </demo>';
      

      $buffer = $str;

      $p = xml_parser_create();

      xml_parser_set_option($p, XML_OPTION_CASE_FOLDING, 0);
      xml_set_object($p, $this);

      xml_set_element_handler($p, 'startElement', 
                              'closeElement');

      xml_set_character_data_handler($p, 'cdataHandler');
      xml_parse($p, $buffer);
      xml_parser_free($p);

  }
    
  function startElement($parser, $name, $a) {

      echo "START ELEMENT: " . $name ." Attrib: ".print_r($a)."\r\n";

  }

  function closeElement($parser, $name) {

      echo "END ELEMENT: " . $name . "\r\n";
      
  }

  function cdataHandler($parser, $cdata) {
    echo "CDATA: " . $cdata. "\r\n";
  }

}


    new Parser('');



?>

</pre>

vvvvvv

Code:
Array
(
)
START ELEMENT: demo Attrib: 1
CDATA: 
                    
Array
(
)
START ELEMENT: liste Attrib: 1
CDATA: 
                        
Array
(
    [id] => 1
    [type] => ??
)
START ELEMENT: punkt Attrib: 1
CDATA: Inhalt diese Punktes (1)
END ELEMENT: punkt
CDATA: 
                        
Array
(
    [id] => 1
    [type] => string(255)
)
START ELEMENT: punkt Attrib: 1
CDATA: Inhalt diese Punktes (2)
END ELEMENT: punkt
CDATA: 
                    
END ELEMENT: liste
CDATA: 
                
END ELEMENT: demo





gruß
hostile
 
Zurück
Oben