Avatar billede proviben Novice
30. december 2004 - 18:17 Der er 3 kommentarer og
1 løsning

Ændring af data fra: D0 til fx: ok

Scriptet spiller 100%, men har dog brug for, at ændre D0 i linie

$data = $GLOBALS['data']['D0']['D1'];

til en text med små bogstaver fx: ok

Hvordan kan det værre, at et stort "OK" virker 100% i linie:

$data = $GLOBALS['data']['OK']['D1'];

- men, at et lille "ok" fejler i linie:

$data = $GLOBALS['data']['ok']['D1'];

og som i øvrigt giver følgende fejlmeddelse:

Warning: Invalid argument supplied for foreach() in /var/www/xxx/html/test/testxml.php on line 41

Warning: First argument to array_keys() should be an array in /var/www/xxx/html/test/testxml.php on line 50

Warning: Bad arguments to implode() in /var/www/xxx/html/test/testxml.php on line 50

Warning: Invalid argument supplied for foreach() in /var/www/xxx/html/test/testxml.php on line 51

##
<?php

$GLOBALS['data'] = array();
$GLOBALS['current'] =& $GLOBALS['data'];

function startTag($parser, $name, $attribs) {
    $GLOBALS['current'][$name]['parent'] =& $GLOBALS['current'];
    $GLOBALS['current'] =& $GLOBALS['current'][$name];
}

function endTag($handler, $name) {
    $temp =& $GLOBALS['current'];
    $GLOBALS['current'] =& $temp['parent'];
    unset($temp['parent']);
}

function data($handler, $data) {
    $data = trim($data);
    if(!empty($data)) {
        $GLOBALS['current'][] = $data;
    }
}

$parser = xml_parser_create('') or die('Failed to create parser');
xml_set_element_handler($parser, 'startTag', 'endTag') or die ("Failed to set element handler");
xml_set_character_data_handler($parser, 'data') or die ("Failed to set data handler");

$fp = fopen('http://www.dummydummy.dk/data.xml', 'r');
while ($xml = fread($fp, 4096))
  xml_parse($parser, $xml, feof($fp))
      or die(sprintf("XML error: %s at line %d",
          xml_error_string(xml_get_error_code($xml_parser)),
          xml_get_current_line_number($xml_parser)));

fclose($fp);

xml_parser_free($parser);

$data = $GLOBALS['data']['D0']['D1'];

foreach($data as $name => $value) {
    foreach($value as $index => $text) {
        $tempArr[$index][$name] = $text;
    }
}

$db = mysql_connect('xxx', 'yyy', 'zzz');
mysql_select_db('xxx', $db);

$dbfields = "D0, D1, " . implode(', ', array_keys($tempArr[0]));
foreach($tempArr as $value) {

    $dbdata = implode("', '", $value);
    $sql = "INSERT INTO table ($dbfields) VALUES('D0', 'D1', '$dbdata')";
    mysql_query($sql, $db);
}

mysql_close($db);

?>
##
Avatar billede proviben Novice
30. december 2004 - 19:41 #1
Poster lige indholdet af data.xml, som der parses fra.

##
<?xml version='1.0' encoding='ISO-8859-1'?>
<ok>
<D1>
<D2>data1</D2>
<D3>data1</D3>
<D4>data1</D4>
<D5>data1</D5>
<D6>data1</D6>
<D7>data1</D7>
<D8>data1</D8>
<D9>data1</D9>
<D10>data1</D10>
</D1>
<D1>
<D2>data2</D2>
<D3>data2</D3>
<D4>data2</D4>
<D5>data2</D5>
<D6>data2</D6>
<D7>data2</D7>
<D8>data2</D8>
<D9>data2</D9>
<D10>data2</D10>
</D1>
<D1>
<D2>data3</D2>
<D3>data3</D3>
<D4>data3</D4>
<D5>data3</D5>
<D6>data3</D6>
<D7>data3</D7>
<D8>data3</D8>
<D9>data3</D9>
<D10>data3</D10>
</D1>
<D1>
<D2>data4</D2>
<D3>data4</D3>
<D4>data4</D4>
<D5>data4</D5>
<D6>data4</D6>
<D7>data4</D7>
<D8>data4</D8>
<D9>data4</D9>
<D10>data4</D10>
</D1> 
</ok>
Avatar billede bojo Nybegynder
31. december 2004 - 09:30 #2
der er forskel på ok og OK som index i en tabel.

Brug array_change_key_case ( http://dk2.php.net/manual/da/function.array-change-key-case.php ) til at ændre dine index
Avatar billede proviben Novice
31. december 2004 - 09:48 #3
Har kigget på din henvisning, hvordan flettets det ind i koden?
Avatar billede proviben Novice
04. januar 2005 - 22:48 #4
Lukker da jeg har fundet en alternativ løsning.
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