Gå til innhold

xml til array konvertering


Anbefalte innlegg

Er det noen fikse måter å kovertere en xml til et php array?

 

xml ser slik ut: (forkortet og sensurert dump fra en database)

<?xml version="1.0" encoding="UTF-8" ?> 
<FMPXMLRESULT xmlns="http://www.xxxxx">
<DATABASE DATEFORMAT="D.m.yyyy" LAYOUT="" NAME="BestCRM" RECORDS="1389" TIMEFORMAT="k:mm:ss" />
<METADATA>
 <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="FELT1" TYPE="NUMBER" /> 
 <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="FELT2" TYPE="TEXT" /> 
 <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="FELT3" TYPE="TEXT" /> 
</METADATA>
<RESULTSET FOUND="3">
 <ROW MODID="7" RECORDID="105010">
   <COL>
     <DATA>1</DATA> 
   </COL>
   <COL>
     <DATA>TEXT1a</DATA> 
   </COL>
   <COL>
     <DATA>TEXT1b</DATA> 
   </COL>
 </ROW>
 <ROW MODID="7" RECORDID="105608">
   <COL>
     <DATA>2</DATA> 
   </COL>
   <COL>
     <DATA>TEXT2a</DATA> 
   </COL>
   <COL>
     <DATA>TEXT2b</DATA> 
   </COL>
 </ROW>
 <ROW MODID="7" RECORDID="105901">
   <COL>
     <DATA>3</DATA> 
   </COL>
   <COL>
     <DATA>TEXT3a</DATA> 
   </COL>
   <COL>
     <DATA>TEXT3b</DATA> 
   </COL>
 </ROW>
</RESULTSET>
</FMPXMLRESULT>

 

Det jeg ønsker meg er noe som lager et array i php, og leser en rad av gangen fra filen, slik at raden kan behandles før neste rad leses, slik at dette ikke skal spise for mye resurrser.

Ved lesing av første rad bør arrayet se ut omtrent slik:

 

$a= array(
   'FELT1'=>1,
   'FELT2'=>'TEXT1a',
   'FELT3'=>'TEXT1b'
);

 

Noen smarte triks?

 

er litt NOOB på dette.

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet-rXRozPkg

Bruk SimpleXML hvis du har muligheten. Du kan veldig enkelt (doh!) hente ut dataene direkte, eller dytte det over i et array, med noe ala dette:

foreach($xml->resultset->row as $row) { 
 foreach($row->col as $col) {
   bruk så $col->data
 }
}

Lenke til kommentar
  • 2 uker senere...

SimpleXML sliter med æ,ø,å!

 

$imp = implode("", $file);
$xml = new SimpleXMLElement($imp);

en print_r($imp) viser æ,ø,å riktig, mens en print_r($xml) ikke gjør det.

 

første linje i xml fila er

<?xml version="1.0" encoding="UTF-8" ?>

Man skulle da tro at SimpleXML skulle ha gode odds for å lese dette riktig.

 

Noen tips for å fikse dette?

 

 

Edit: Hvis jeg endrer på xml-fila og skriver en annen tegnsettkode i første linje viser SimpleXML æ,ø,å som andre tegn enn da det sto UTF-8 der. Den tar altså hensyn til spesifisert tegnsett, men likevel går noe galt....

Endret av petterg
Lenke til kommentar
Der leser den riktig :)

 

Men nå, om jeg setter inn i mysql klipper den all tekst f.o.m de samme 3 bokstavene!

8879531[/snapback]

Er ikke helt sikker på hva du mener med "setter inn mysql" men du kan jo prøve kommandoen utf8_encode($string); selvom jeg ikke tror dette er en -god- løsning på problemet. Mulig du må endre litt på oppsettet av databasen, men her er jeg på tynn is.

 

Kunne du forklart problemet nærmere?

Lenke til kommentar

når jeg har fått et array ut av xml'n setter jeg noen av verdiene fra arrayet inn i en mysql database.

Da arrayet inneholdt rare tegn (i steden for æ,ø,å) før utf8_encode ble alle de rare tegnene lagret som rare tegn (ikke som æ,ø,å).

Med utf8_encode fungerer æ,ø,å som stoptegn. Altså om jeg forsøker å lagre "abcødef" blir det lagret som bare "abc".

Lenke til kommentar
når jeg har fått et array ut av xml'n setter jeg noen av verdiene fra arrayet inn i en mysql database.

Da arrayet inneholdt rare tegn (i steden for æ,ø,å) før utf8_encode ble alle de rare tegnene lagret som rare tegn (ikke som æ,ø,å).

Med utf8_encode fungerer æ,ø,å som stoptegn. Altså om jeg forsøker å lagre "abcødef" blir det lagret som bare "abc".

8881082[/snapback]

Jeg kan desverre ikke hjelpe med dette. Men har en mistanke om at det kan ha noe med oppsettet av MySQL på din server. Prøv og søke etter andre poster som kan ha med norske tegnsett og MySQL evt prøv og spør i database / server forumet.

Lenke til kommentar

Hei

 

Problemet ligger i funksjonen xml_parse() som sikkert er brukt i SimpleXML. Jeg hadde samme problem med æøå i en webdav-klient for php. xml_parse() krever at argumentet er i utf-8-format. Å gjøre om input med utf8_encode() først hjalp ikke.

 

En quick-n-dirty løsning på problemet er å lage deg en funksjon som du kaller rett før xml_parser() blir kjørt, som gjør om æøåÆØÅ til koder, som du endrer tilbake etterpå med en annen funksjon.

 

Lykke til

Erik

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...