Seite 1 von 1
XML-File in Tabelle laden
Verfasst: Mo 20. Nov 2006, 16:42
von busdriver
Hallo Forum,
ich muss ein XML-File
Code: Alles auswählen
<?xml version="1.0" encoding="utf-8" ?>
<DATA>
<REPORT_DATE>6-Nov-2006</REPORT_DATE>
<IP_RECORD>
<ADDRESS>xxxxxxx</ADDRESS>
<HOSTNAME>xxxxxxxx</HOSTNAME>
<OWNER>xxxxxxxxx</OWNER>
</IP_RECORD>
<IP_RECORD>
<ADDRESS>xxxxxxx</ADDRESS>
<HOSTNAME>xxxxxxxx</HOSTNAME>
<OWNER>xxxxxxxxx</OWNER>
</IP_RECORD>
</DATA>
in eine Tabelle laden, deren Felder gleich dem XML-Files ist.
So nun habe ich die XML-Classe gefunden und versucht aus der Doku bzw. Forumeinträgen zum Thema mir die Verwendung der Klasse anzueignen.
Aber irgendwie schaffe ich das nicht. Ist da jemand der mir dabei unter die Arme greifen kann?
lg
rg
Verfasst: Mo 20. Nov 2006, 17:13
von Dodger77
Probier es doch mal mit folgendem Moduloutput (die Funktionen stammen von
hier):
Code: Alles auswählen
<?php
function xml2array($s) {
if ($Atmp1=explode('>',$s,2)
/* && ereg('^<\?(xml .*)\?$',$Atmp1[0],$Atmp2)*/) {
//$A['xml']=$Atmp2[1];
//XML Version, kümmert niemanden
//funktioniert nur bei korrekten XML eingaben
xml2array_sub($A,$Atmp1[1]);
}
return $A;
}
function xml2array_sub(&$A,$s) {
global $error_msg;
for ($c=0;ereg('<([^<>/ ]*)( [^<>]*)?/>(.*)',$s,$Atmp1) or
ereg('<([^<>/ ]*)( [^<>]*)?>(.*)',$s,$Atmp1) and
$Atmp2=explode('</'.$Atmp1[1].'>',$Atmp1[3],2);++$c) {
$E=array();
$tag=$Atmp1[1];
if ($Atmp1[2]) {
$Atmp3=explode(' ',substr($Atmp1[2],1));
foreach ($Atmp3 as $d) {
$Atmp4=explode('=',$d,2);
$Atmp4[1]=ereg_replace('^"(.*)"$','\1',$Atmp4[1]);
$E[$Atmp4[0]]=$Atmp4[1];
}
}
if ($Atmp2) {
if (!xml2array_sub($E,$Atmp2[0])) {
$E=$Atmp2[0];
}
$s=$Atmp2[1]; //rest of the xml-code
$Atmp2=false;
}
else {
$s=$Atmp1[3]; //rest of the xml-code
}
if ($A[$tag]) { //does it already exist?
//not already a numberically indexed array?
if (!is_array($A[$tag]) or !$A[$tag][0]) {
$Atag=$A[$tag]; //remove element again
unset($A[$tag]);
//make old element first element of it's former self
$A[$tag][]=$Atag;
}
if ($E) {
$A[$tag][]=$E; //add new element
}
}
else {
if ($E) {
$A[$tag]=$E;
if ($tag=='$ErrorMsg') $error_msg=$E;
}
}
}
return $c;
}
$xmlstring = "<?xml version="1.0" encoding="utf-8" ?>
<DATA>
<REPORT_DATE>6-Nov-2006</REPORT_DATE>
<IP_RECORD>
<ADDRESS>xxxxxxx</ADDRESS>
<HOSTNAME>xxxxxxxx</HOSTNAME>
<OWNER>xxxxxxxxx</OWNER>
</IP_RECORD>
<IP_RECORD>
<ADDRESS>xxxxxxx</ADDRESS>
<HOSTNAME>xxxxxxxx</HOSTNAME>
<OWNER>xxxxxxxxx</OWNER>
</IP_RECORD>
</DATA> ";
$arr = xml2array($xmlstring);
print_r($arr);
?>
Verfasst: Di 21. Nov 2006, 11:25
von busdriver
Seas Dodger77,
vielen Dank für die Hilfe. Ich versteh zwar Nüsse wie das Script das macht was es macht. Aber das was es macht ist genau das was ich brauch.
Danke.
lg
rg