Avatar billede lullalej Nybegynder
04. oktober 2007 - 17:09 Der er 7 kommentarer og
1 løsning

XML til MySQL

Hejsa

Jeg har en datalogger som laver xml-filer... Så skal jeg ha' en side jeg kan gå ind på, og kopiere indholdet fra xml-filen over i en MySQL database..

XML-filen ser sådan her ud:

  <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
  <!DOCTYPE DataLogger (View Source for full doctype...)>
- <DataLogger VERSION="1.0.0" Name="Log" Ts="2007-10-04T16:31:53+01:00">
- <Readings Channel="0" Name="D000.Elmåler" Unit="kWh">
  <Reading Id="15" Ts="2007-10-04T11:34:00Z" Va="33,4" St="0" />
  <Reading Id="16" Ts="2007-10-04T11:35:00Z" Va="33,4" St="0" />
  <Reading Id="17" Ts="2007-10-04T11:36:00Z" Va="33,4" St="0" />
  <Reading Id="18" Ts="2007-10-04T11:37:00Z" Va="33,4" St="0" />
  <Reading Id="19" Ts="2007-10-04T11:38:00Z" Va="33,4" St="0" />
  <Reading Id="20" Ts="2007-10-04T11:39:00Z" Va="33,4" St="0" />
  <Reading Id="21" Ts="2007-10-04T11:40:00Z" Va="33,4" St="0" />
  </Readings>
- <Readings Channel="1" Name="D000.Vandmåler" Unit="m3">
  <Reading Id="15" Ts="2007-10-04T11:34:00Z" Va="4,24" St="0" />
  <Reading Id="16" Ts="2007-10-04T11:35:00Z" Va="4,24" St="0" />
  <Reading Id="17" Ts="2007-10-04T11:36:00Z" Va="4,25" St="0" />
  <Reading Id="18" Ts="2007-10-04T11:37:00Z" Va="4,27" St="0" />
  <Reading Id="19" Ts="2007-10-04T11:38:00Z" Va="4,27" St="0" />
  <Reading Id="20" Ts="2007-10-04T11:39:00Z" Va="4,27" St="0" />
  <Reading Id="21" Ts="2007-10-04T11:40:00Z" Va="4,27" St="0" />
  </Readings>
  </DataLogger>

Channel bestemmer hvilken tabel det skal ind i.
ID skal ind i feltet id, som er unikt.
Ts skal ind i time.
Va skal ind i vaerdi

Nogen der kan forklare mig hvordan man gør? :D
Det er ikke bare løsningen jeg leder efter, men også forståelsen ;)
Avatar billede lullalej Nybegynder
04. oktober 2007 - 17:18 #1
Det er http://domain.tld/data.xml?latest=500 den skal hente fra...
Avatar billede jakobdo Ekspert
04. oktober 2007 - 21:18 #2
PHP4 eller PHP5?
Avatar billede lullalej Nybegynder
04. oktober 2007 - 21:24 #3
Helst PHP4...
Avatar billede jakobdo Ekspert
04. oktober 2007 - 21:46 #4
Understøtter din server følgende: domxml() så vi kan arbejde med:
domxml_open_file()
Avatar billede lullalej Nybegynder
05. oktober 2007 - 11:37 #5
Det er en apache 2 med php 4, jeg ved at xml er aktiveret på den, og aner ikke om den understøtter domxml(); jeg ved heller ikke lige hvordan jeg skal finde ud af det..
Avatar billede zurekk Nybegynder
05. oktober 2007 - 11:55 #6
Prøv med:

if( !domxml_open_file( 'dinfil.xml' ) )
echo 'Det har jeg ikke!';
Avatar billede lullalej Nybegynder
05. oktober 2007 - 14:09 #7
Det kan den ikke:

Fatal error: Call to undefined function: domxml_open_file() in /var/www/test.php on line 2
Avatar billede lullalej Nybegynder
15. oktober 2007 - 19:18 #8
Jeg har ordnet det på en lidt alternativ måde:

<?

set_time_limit(0);

include("sql.php");

$a = 0;

$s_nyeste = mysql_query("SELECT id FROM elmaler ORDER BY id DESC LIMIT 1") OR DIE(mysql_error());
WHILE($nyeste = mysql_fetch_array($s_nyeste)) {

    $nyeste1 = $nyeste[id]+1;

}

if($nyeste1 < 1) {

    $nyeste1 = 66;

}

$nyt = file_get_contents("http://datalogger/data.xml?ch=0&idge=$nyeste1");

$delt2 = explode("kWh\">",$nyt);

$nyt = $delt2[1];

$nyt = ereg_replace("<Reading Id=\"","",$nyt);
$nyt = ereg_replace("\" Ts=\"",";",$nyt);
$nyt = ereg_replace("Z\" Va=\"",";",$nyt);
$nyt = ereg_replace("\" St=\"",";",$nyt);
$nyt = ereg_replace("\"/>",".",$nyt);
$nyt = ereg_replace("T",";",$nyt);

$delt1 = explode(".", $nyt);

$i = 0;

WHILE($delt1[$i] != NULL) {

    $delt = explode(";", $delt1[$i]);

    $id = $delt[0];
    $dato = $delt[1];
    $tid = $delt[2];
    $vaerdi = $delt[3];

    $length = strlen($id)-2;
    $id_ny = substr($id,-$length);

    if($delt[0] > 0) {

        $vaerdi = ereg_replace(",",".",$vaerdi);

        $datoen = explode("-", $dato);
        $tiden = explode(":", $tid);

        mysql_query("INSERT INTO elmaler (id,dato,year,month,date,tid,hour,minut,second,vaerdi) VALUES ('$id_ny','$dato','$datoen[0]','$datoen[1]','$datoen[2]','$tid','$tiden[0]','$tiden[1]','$tiden[2]','$vaerdi')") OR DIE(mysql_error());
   
        $a++;

    }

    $i++;

}

print $a;

?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester