php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > XML
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


XML Hier passt alles rein, was das Thema XML (XSLT, JSON etc...) betrifft, auch in Verbindung mit PHP

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 19-08-2003, 11:45
meglepetes
 Junior Member
Links : Onlinestatus : meglepetes ist offline
Registriert seit: Aug 2003
Beiträge: 61
meglepetes ist zur Zeit noch ein unbeschriebenes Blatt
Standard xml => mysql

einen fröhlichen ...

im rahmen meiner praktikumsarbeit muß ich eine xml-datei in eine mysql rüberschieben. soll alles so flexibel gehandelt werden, das der script universell einsetzbar ist. es gibt immer eine dtd. die habe ich nun endlich so auseinandernehmen können, das mir schon mal die tabellen angelegt werden. die dtd mußte deshalb herhalten, weil es zu einer dtd mehrere xml geben kann. das vorab zur erklärung. nun häng ich schon seit tagen vor der xml-datei und stiere mir die augen aus dem kopf, weil ich die nicht gescheit geparst bekomme. vielleicht kann mir ja hier wer weiterhelfen ... *hoff*

die xml

Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE AuthorityData SYSTEM "firma.dtd">
<AuthorityData>
        <Tasks>
                <Task> Aufgabe 1der Firma</Task>
                <Task> Aufgabe 2der Firma</Task>
        </Tasks>
         <Adress>
                <Name> Name der Firma</Name>
                <ZipCode>PLZ</ZipCode>
                <PostOfficeBox>Postfach</PostOfficeBox>
                <City>Stadtname</City>
        </Adress>
        <Adress>
                <Name> Name der Firma </Name>
                <Street>Strassenname</Street>
                <Number>Strassennummer</Number>
                <ZipCode>PLZ</ZipCode>
                <City>Stadtname</City>
                <Tel>8888</Tel>
                <Fax>9999</Fax>
                <eMail>info@xxx.de</eMail>
                <Website>www.xxx.de</Website>
                <OpeningHours>
                        <OpeningTupel>
                                <date>Di</date>
                                <hours>9:00 - 12:00 Uhr und 14:00 - 18:00 Uhr</hours>
                        </OpeningTupel>
                        <OpeningTupel>
                                <date>Do</date>
                                <hours>9:00 - 12:00 Uhr und 13:00 - 15:00 Uhr</hours>
                        </OpeningTupel>
                </OpeningHours>
                <ContactPerson>
                        <Show>true</Show>
                        <Calling>Frau</Calling>
                        <Title>Dr.</Title>
                        <GivenName>Anna</GivenName>
                        <FamilyName>Ehmke</FamilyName>
                        <Function>Sachbearbeiterin</Function>
                        <Tel>8888</Tel>
                        <Fax>8888</Fax>
                        <eMail>info@xxx.de</eMail>
                        <Tasks>
                                <Task>Aufgabe 1 der Kontaktperson</Task>
                                <Task>Aufgabe 2 der Kontaktperson</Task>
                        </Tasks>
                        <Tasks>
                                <Task>Anmeldung von Hunden</Task>
                        </Tasks>
                        <ServiceContact>
                                <ServiceOid oid="3301"> Hund anmelden</ServiceOid>
                        </ServiceContact>
                </ContactPerson>
        </Adress>
</AuthorityData>
die dtd

Code:
<!ELEMENT Adress (Name?, Street?, Number?, ZipCode?, PostOfficeBox?, City?, Tel?, Fax?, eMail?, Website?, OpeningHours?, ContactPerson?)*>
<!ELEMENT AuthorityData (Tasks?, Adress*)*>
<!ELEMENT Calling (#PCDATA)>
<!ELEMENT City (#PCDATA)>
<!ELEMENT ContactPerson (Show?, Calling?, Title?, GivenName?, FamilyName?, Function?, Tel?, Fax?, eMail?, Tasks*, ServiceContact?)*>
<!ELEMENT FamilyName (#PCDATA)>
<!ELEMENT Fax (#PCDATA)>
<!ELEMENT Function (#PCDATA)>
<!ELEMENT GivenName (#PCDATA)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Number (#PCDATA)>
<!ELEMENT OpeningHours (OpeningTupel*)*>
<!ELEMENT OpeningTupel (date, hours)*>
<!ELEMENT PostOfficeBox (#PCDATA)>
<!ELEMENT ServiceContact (ServiceOid*)*>
<!ELEMENT ServiceOid (#PCDATA)>
<!ATTLIST ServiceOid
        oid CDATA #REQUIRED
>
<!ELEMENT Show (#PCDATA)>
<!ELEMENT Street (#PCDATA)>
<!ELEMENT Task (#PCDATA)>
<!ELEMENT Tasks (Task*)*>
<!ELEMENT Tel (#PCDATA)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Website (#PCDATA)>
<!ELEMENT ZipCode (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT eMail (#PCDATA)>
<!ELEMENT hours (#PCDATA)>
bis denne

megle


EDIT:
code.tags by Abraxax
sonst stieren sich nämlich andere user auch die augen aus dem kopf.


Geändert von Abraxax (19-08-2003 um 12:19 Uhr)
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 19-08-2003, 20:08
Blaster
 PHP Junior
Links : Onlinestatus : Blaster ist offline
Registriert seit: Nov 2001
Ort: Köln
Beiträge: 968
Blaster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Fehlermeldung? Zeile?
__________________
Yuppi, endlich Elite ...
Mit Zitat antworten
  #3 (permalink)  
Alt 20-08-2003, 09:14
meglepetes
 Junior Member
Links : Onlinestatus : meglepetes ist offline
Registriert seit: Aug 2003
Beiträge: 61
meglepetes ist zur Zeit noch ein unbeschriebenes Blatt
Standard

es gibt noch keinen fehler, ich grübel immer noch über dem lösungsansatz ... es ist mir bisher nur gelungen, die entsprechend benötigten tabellen anlegen zu lassen durch parsen der dtd. nun grübel ich darüber, wie ich die xml da rein bekomme.
Mit Zitat antworten
  #4 (permalink)  
Alt 20-08-2003, 14:49
meglepetes
 Junior Member
Links : Onlinestatus : meglepetes ist offline
Registriert seit: Aug 2003
Beiträge: 61
meglepetes ist zur Zeit noch ein unbeschriebenes Blatt
Standard

vielleicht hilft es ja weiter, wenn ich schon mal mein code-schnippsel für die dtd poste ...

Code:
function dtdParsen() {
	global $c_dtdname, $c_lokalerpfad_relativ, $i_aktzeit, $r_sqlhandle, $c_datenbank, $a_felderliste, $a_tabellenliste;
	$a_tabellenparameter = array();
	$a_query_create_table = array();
	$c_dtddatei = $c_lokalerpfad_relativ . $c_dtdname;
	$r_meinfilehandler = fopen( $c_dtddatei , r );
	$c_inhalt = fread( $r_meinfilehandler , filesize( $c_dtddatei ) + 100 );
	fclose($r_meinfilehandler);
	$a_dtd = explode("<" , $c_inhalt);
#	$a_dtdbereinigt = array();
	for( $i = 0 ; $i < count( $a_dtd ) ; $i++ ) {
		if ( substr($a_dtd[$i],0,5) == "!ELEM" || substr($a_dtd[$i],0,5) == "!ATTL") {
			if ( substr($a_dtd[$i],0,5) == "!ELEM" ) {
				$a_dtd[$i] = substr($a_dtd[$i],9,strlen($a_dtd[$i]));
				$c_name = substr($a_dtd[$i],0,strpos($a_dtd[$i]," "));
				$c_parameter = str_replace(" ","",substr($a_dtd[$i] , strpos($a_dtd[$i],"(") + 1 , strpos($a_dtd[$i],")") - strpos($a_dtd[$i],"(") - 1) );
				if( substr($c_parameter,0,7) == "#PCDATA" ) {
					$a_paramter = explode(",",$c_parameter);
					$neu = array_push( $a_felderliste , $c_name);
				} else {
					$neu = array_push( $a_tabellenparameter , $c_parameter);
					$neu = array_push( $a_tabellenliste , $c_name);
				}
			}
#			$neu = array_push( $a_dtdbereinigt , $a_dtd[$i]);
		}	
	}
/*
 Startelement entfernen
 */
	for( $i = 0 ; $i < count( $a_tabellenliste ) ; $i++ ) {
		$c_tabellenname = $a_tabellenliste[$i];
		$b_gefunden = FALSE;
		for( $n = 0 ; $n < count( $a_tabellenparameter ) ; $n++ ) {
			if ( strlen( stristr( $a_tabellenparameter[$n], $a_tabellenliste[$i]) ) > 0 ) {
				$b_gefunden = TRUE;
			}
		}
		if ( !$b_gefunden ) {
			unset( $a_tabellenliste[$i] );
			$i_gefunden = $i;
		}
	}
	unset( $a_tabellenparameter[$i_gefunden] );
	$a_tabellenliste = array_values($a_tabellenliste);
	$a_tabellenparameter = array_values($a_tabellenparameter);
	
	echo "<pre>\n";
	print "tabellenliste<br>";
	print_r( $a_tabellenliste);
	print "tabellenparameter<br>";
	print_r( $a_tabellenparameter);
#	print "felderliste<br>";
#	print_r( $a_felderliste);
	echo "</pre>\n";

/*
 CREATE TABLES generieren und in Array schieben
 */

	for( $i = 0 ; $i < count( $a_tabellenliste ) ; $i++ ) {
		$c_meindtd = str_replace(".dtd", "" , $c_dtdname);
		$c_meindtd = str_replace($i_aktzeit, "" , $c_meindtd);
		$c_query = "CREATE TABLE `" . $c_meindtd . "_" . $a_tabellenliste[$i] . "` ( ";
		$c_query .= "`id` int(11) NOT NULL auto_increment";
		$a_tabellenfelder = explode(",", $a_tabellenparameter[$i]);
		for( $f = 0 ; $f < count( $a_tabellenfelder ) ; $f++ ) {
			if ( strpos($a_tabellenfelder[$f],"?") > 0 ) {
				$a_tabellenfelder[$f] = str_replace("?","",$a_tabellenfelder[$f]);
				if ( !in_array($a_tabellenfelder[$f],$a_felderliste ) ){
					$c_query .= ",`$a_tabellenfelder[$f]` int(11)";
				} else {
					$c_query .= ",`$a_tabellenfelder[$f]` varchar(255) default ''";
				}
			} else if ( ( strpos($a_tabellenfelder[$f],"*") > 0 ) || ( strpos($a_tabellenfelder[$f],"+") > 0 ) ) {
				$a_tabellenfelder[$f] = str_replace("*","",$a_tabellenfelder[$f]);
				$a_tabellenfelder[$f] = str_replace("+","",$a_tabellenfelder[$f]);
				if ( !in_array( $a_tabellenfelder[$f] , $a_felderliste ) ) {
					$c_query_schluessel = "CREATE TABLE `" . $c_meindtd . "_" . $a_tabellenliste[$i] . "_" . $a_tabellenfelder[$f] . "` ( ";
					$c_query_schluessel .= "`id` int(11) NOT NULL auto_increment";
					$c_query_schluessel .= ",`$a_tabellenliste[$i]` int(11)";
					$c_query_schluessel .= ",`$a_tabellenfelder[$f]` int(11)";
					$c_query_schluessel .= ",PRIMARY KEY  (`id`) );";				
					$neu = array_push( $a_query_create_table , $c_query_schluessel);
				} else {
					if ( !in_array($a_tabellenfelder[$f],$a_felderliste ) ){
						$c_query .= ",`$a_tabellenfelder[$f]` int(11)";
					} else {
						$c_query .= ",`$a_tabellenfelder[$f]` varchar(255) default ''";
					}
				}
			} else {
				if ( !in_array($a_tabellenfelder[$f],$a_felderliste ) ){
					$c_query .= ",`$a_tabellenfelder[$f]` int(11)";
				} else {
					$c_query .= ",`$a_tabellenfelder[$f]` varchar(255) default ''";
				}
			}
		}
		$c_query .= ",PRIMARY KEY  (`id`) );";
		$neu = array_push( $a_query_create_table , $c_query);
	}
	echo "<pre>\n";
	print_r( $a_query_create_table);
	echo "</pre>\n";
/*
 Tabellenliste holen und bei nichtvorhandensein die Tabellen anlegen
 */
	$a_vorhandenetabellen = array();
	mysql_selectdb($c_datenbank, $r_sqlhandle);
	$r_tabellenliste = mysql_listtables($c_datenbank);
	while ( $i_t < mysql_num_rows($r_tabellenliste ) ){
		$neu = array_push($a_vorhandenetabellen,mysql_tablename($r_tabellenliste, $i_t));
		$i_t++;
	}
	for( $i = 0 ; $i < count( $a_query_create_table ) ; $i++ ) {
		$i_ersteshochkomma = strpos($a_query_create_table[$i],"`",0) + 1;
		$i_zweiteshochkomma = strpos($a_query_create_table[$i],"`",$i_ersteshochkomma);
		$c_tabelle = strtolower(substr( $a_query_create_table[$i], $i_ersteshochkomma , $i_zweiteshochkomma - $i_ersteshochkomma));
		if ( !in_array($c_tabelle,$a_vorhandenetabellen ) ){
			print "$a_query_create_table[$i] <br><br>";
			$abfrage = mysql_query($a_query_create_table[$i], $r_sqlhandle);
			echo mysql_error();
			echo "<br><br>";
		} else {
/*
 Hier muß die bestehende Tabelle noch gecheckt werden, ob evtl. Felder hinzugekommen sind (die DTD wurde geändert)
 */
			print "Die Tabelle \"$c_tabelle\" existiert schon<br><br>";
		}		
	}
}
das bringt mir folgende tabellen, und wenn ich so drüber schaue, sollte es auch stimmen ...

Code:
Array
(
    [0] => CREATE TABLE `behoerde_Adress` ( `id` int(11) NOT NULL auto_increment,`Name` varchar(255) default '',`Street` varchar(255) default '',`Number` varchar(255) default '',`ZipCode` varchar(255) default '',`PostOfficeBox` varchar(255) default '',`City` varchar(255) default '',`Tel` varchar(255) default '',`Fax` varchar(255) default '',`eMail` varchar(255) default '',`Website` varchar(255) default '',`OpeningHours` int(11),`ContactPerson` int(11),PRIMARY KEY  (`id`) );
    [1] => CREATE TABLE `behoerde_ContactPerson_Tasks` ( `id` int(11) NOT NULL auto_increment,`ContactPerson` int(11),`Tasks` int(11),PRIMARY KEY  (`id`) );
    [2] => CREATE TABLE `behoerde_ContactPerson` ( `id` int(11) NOT NULL auto_increment,`Show` varchar(255) default '',`Calling` varchar(255) default '',`Title` varchar(255) default '',`GivenName` varchar(255) default '',`FamilyName` varchar(255) default '',`Function` varchar(255) default '',`Tel` varchar(255) default '',`Fax` varchar(255) default '',`eMail` varchar(255) default '',`ServiceContact` int(11),PRIMARY KEY  (`id`) );
    [3] => CREATE TABLE `behoerde_OpeningHours_OpeningTupel` ( `id` int(11) NOT NULL auto_increment,`OpeningHours` int(11),`OpeningTupel` int(11),PRIMARY KEY  (`id`) );
    [4] => CREATE TABLE `behoerde_OpeningHours` ( `id` int(11) NOT NULL auto_increment,PRIMARY KEY  (`id`) );
    [5] => CREATE TABLE `behoerde_OpeningTupel` ( `id` int(11) NOT NULL auto_increment,`date` varchar(255) default '',`hours` varchar(255) default '',PRIMARY KEY  (`id`) );
    [6] => CREATE TABLE `behoerde_ServiceContact` ( `id` int(11) NOT NULL auto_increment,`ServiceOid` varchar(255) default '',PRIMARY KEY  (`id`) );
    [7] => CREATE TABLE `behoerde_Tasks` ( `id` int(11) NOT NULL auto_increment,`Task` varchar(255) default '',PRIMARY KEY  (`id`) );
)
und nun muß da nur noch die xml richtig rein. das blöde sind halt die 1-n verbindungen

bis denne

megle
Mit Zitat antworten
  #5 (permalink)  
Alt 20-08-2003, 16:28
meglepetes
 Junior Member
Links : Onlinestatus : meglepetes ist offline
Registriert seit: Aug 2003
Beiträge: 61
meglepetes ist zur Zeit noch ein unbeschriebenes Blatt
Standard xml(dtd) => mysql

hollachens zusammen,

im rahmen meiner praktikumsarbeit habe ich eine dtd und mehrere xml bekommen, die auf der einen dtd aufbauen. das alles soll nun in eine mysql gebracht werden. den script für die dtd zu parsen und die tabellen anzulegen hab ich schon, vielleicht (bestimmt) verbesserungswürdig. nun such ich noch nach möglichkeiten (script), um die xml auseinander zu nehmen und in die db zu schieben. prob sind hierbei die 1-n verbindungen. die dtd, xml und den dtdparser findet ihr im php-xml forum. mag eigentlich nicht crossposten, kenn aber eure gewohnheiten nicht, wer wann wo in welches forum schaut. vielleicht könnt ihr ja mit lösungsansätzen weiterhelfen.

bis denne

megle
Mit Zitat antworten
  #6 (permalink)  
Alt 20-08-2003, 16:38
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
mag eigentlich nicht crossposten, kenn aber eure gewohnheiten nicht, wer wann wo in welches forum schaut.
und dennoch machst du es...

*ZUSAMMENFÜHR*

wenn einer eine lösung für die hat, wird er sich melden. je ausgefallener die probleme sind, umso länger dauert es eben, bis eine antwort kommt. das ist aber normal.
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #7 (permalink)  
Alt 24-11-2004, 14:22
DND
 Newbie
Links : Onlinestatus : DND ist offline
Registriert seit: Nov 2004
Beiträge: 5
DND ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@meglepetes

Hallo,

bist du bei deinem Problem weitergekommen. Ich stehe an einer ähnlichen Stelle. Kannst du mir sagen wie ich die SQL-Statements aus dem Array dann an die DB gebe und die DAten dann auch übergeben werden?
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

Microweber CMS

Open source, drag and drop website builder

13.01.2020 Berni | Kategorie: HTML5/ EDITOR
PhoneGap Apps mit JS, CSS3 und HTML5 erstellen ansehen PhoneGap Apps mit JS, CSS3 und HTML5 erstellen

PhoneGap, Framework zur Erstellung hybrider Applikationen für mobile Endgeräte.

13.01.2020 Berni | Kategorie: App-Entwicklung
Bo)Tickets

Bo)Tickets bietet Ihnen eine Schnittstelle für Kundenanfragen an. In dem Script definieren Sie Supportbereiche, also zum Beispiel „Technik, Buchhaltung, Support“. Ihre Kunden können dann über ein Formular eine Anfrage abschicken.

31.12.2019 bocombo | Kategorie: PHP/ Ticketsystem
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:30 Uhr.