Hallo allerseits!
Ich habe eine Art XML Datenbank vor mir, sich beschreiben alle unterschiedliche Objekte des gleichen Typs.
Jetzt würde ich gerne die Informationen in bestimmten Tags auslesen und diese in meine MySQL Datenbank schreiben (indem ich die Dateien per Zählschleide durchlaufe und auslese).
So genau weiß ich aber nicht wie das geht.
Ich habe nach längerem recherchieren folgende Möglichkeit zum Parsen herausgefunden:
Also anscheinend kommt er irgendwie an die Daten der Tags.
Nur speichert er diese jetzt nicht in Variablen oder einem Array, sondern gibt diese direkt aus, was nicht mein Anliegen ist.
Außerdem enthält eine Zeile HTML und diese gibt er z.b. gar nicht aus.
(dies wäre allerdings zu vershcmerzen)
Mir geht es jetzt also eigentlich nur noch darum die Informationen NICHT zu parsen SONDERN in Variablen zu speichern.
Ich verfüge über die PHP Version 4.4.2 .
Ich habe eine Art XML Datenbank vor mir, sich beschreiben alle unterschiedliche Objekte des gleichen Typs.
Jetzt würde ich gerne die Informationen in bestimmten Tags auslesen und diese in meine MySQL Datenbank schreiben (indem ich die Dateien per Zählschleide durchlaufe und auslese).
So genau weiß ich aber nicht wie das geht.
Ich habe nach längerem recherchieren folgende Möglichkeit zum Parsen herausgefunden:
PHP:
<?php
// Umwandlungstabelle definieren
$tag_tabelle = array(
"SECT1" => "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.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 );
?>
Also anscheinend kommt er irgendwie an die Daten der Tags.
Nur speichert er diese jetzt nicht in Variablen oder einem Array, sondern gibt diese direkt aus, was nicht mein Anliegen ist.
Außerdem enthält eine Zeile HTML und diese gibt er z.b. gar nicht aus.
(dies wäre allerdings zu vershcmerzen)
Mir geht es jetzt also eigentlich nur noch darum die Informationen NICHT zu parsen SONDERN in Variablen zu speichern.
Ich verfüge über die PHP Version 4.4.2 .