!!! Listing 1: expat_beispiel.php
"P",
"TITLE" => "B",
"PARA" => "P"
);
// start_element() - wird vom XML-Parser bei öffnenden
// Tags aufgerufen
function start_element( $parser, $name, $attribute )
{
// Umwandlungstabelle in den lokalen Scope holen
global $tag_tabelle;
// Testen, ob den aktuelle Tag in der Tabelle definiert ist
if( isset( $tag_tabelle[ $name ] ) )
{
// Öffnenden Tag ausgeben
print "<" . $tag_tabelle[ $name ] . ">";
}
}
// end_element() - wird vom XML-Parser bei schließenden
// Tags aufgerufen
function end_element( $parser, $name )
{
// Umwandlungstabelle in den lokalen Scope holen
global $tag_tabelle;
// Testen, ob der aktuelle Tag in der Tabelle definiert ist
if( isset( $tag_tabelle[ $name ] ) )
{
// Schließenden Tag ausgeben
print "" . $tag_tabelle[ $name ] . ">";
}
}
// daten() - wird vom XML-Parser für CDATA-Bereiche aufgerufen
function daten( $parser, $data )
{
// Datenbereich ausgeben
print $data;
}
// Instanz des XML Parsers erzeugen
$parser = xml_parser_create();
// Parameter des XML Parsers setzen
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, true );
// Handler für Elemente ( öffnende / schließende Tags ) setzen
xml_set_element_handler( $parser, "start_element", "end_element" );
// Handler für Daten ( CDATA ) setzen
xml_set_character_data_handler( $parser, "daten" );
// Versuchen, die Datei zu öffnen
if (! ( $fp = fopen( "expat_beispiel.xml", "r" ) ) )
{
// Fehler -> Ausführung abbrechen
die( "XML Fehler: Konnte Datei nicht öffnen." );
}
// Datei zeilenweise auslesen
while( $data = fread( $fp, 4096 ) )
{
// Versuchen, die aktuelle Zeile zu parsen
if( !xml_parse( $parser, $data, feof( $fp ) ) )
{
// Fehler -> Ausführung abbrechen
die( "XML Fehler: " .
xml_error_string( xml_get_error_code( $parser ) ) .
" in Zeile " .
xml_get_current_line_number( $parser )
);
}
}
// Vom XML-Parser belegten Speicher freigeben
xml_parser_free( $parser );
?>
!!! Listing 2: expat_beispiel.xml
Absatztitel
Absatztext
!!! Listing 4: create_article.php... $root = $doc->add_root( "article" ); //!!! Listing 5: artikel.xml... $artheader = $root->new_child( "artheader", "" ); //... $art_title = $artheader->new_child( "title", "Ein Artikel in DocBook" ); //... $author = $artheader->new_child( "author", "" ); //... ,... $firstname = $author->new_child( "firstname", "Sebastian" ); $surname = $author->new_child( "surname", "Bergmann" ); //... $sect = $root->new_child( "sect1", "" ); //... $sect_title = $sect->new_child( "title", "Absatzüberschrift" ); //... $sect_para = $sect->new_child( "para", "Absatztext" ); // XML ausgeben print htmlspecialchars( $doc->dumpmem() ); ?>
Absatztitel
Absatztext