nilsh Skrevet 29. mars 2007 Del Skrevet 29. mars 2007 (endret) Noen her som har kunnskaper på dette? Eller vet om det er mye mer komplisert enn å lagre i mysql? Skal bruke xml-filer til lagring. Endret 29. mars 2007 av nilsh Lenke til kommentar
Gjest Slettet-df17e Skrevet 29. mars 2007 Del Skrevet 29. mars 2007 Tror nok du må forklare litt nermere hva du lurer på. For jeg skjønte absolutt ikke hva du lurer på Men parsing av XML filer er ikke så komplisert, nei. En litt bedre tittel på tråden kunne også gjort susen. Lenke til kommentar
nilsh Skrevet 29. mars 2007 Forfatter Del Skrevet 29. mars 2007 Tror nok du må forklare litt nermere hva du lurer på. For jeg skjønte absolutt ikke hva du lurer på Men parsing av XML filer er ikke så komplisert, nei. En litt bedre tittel på tråden kunne også gjort susen. DOM står for document object model.. Det kan brukes til å kommunisere med et xml-dokument i likhet med sax.. tror jeg. forskjellen på det og sax er at med dom så hentes hele dokumentet inn i minnet og det kan hoppes frem og tilbake i dokumentet, og ikke trinnvis, som sax.. hvis jeg har forstått det riktig. Lenke til kommentar
PHPdude Skrevet 29. mars 2007 Del Skrevet 29. mars 2007 Det spørs nok veldig på hva du skal lagre, ytelsen kan jo bli et problem vis du skal lagre enorme mengder data, men samtidig kan nok ytelsen på noen områder være betydelig bedre vis man slipper database-serveren. SQL har fordeler overfor DOM og Xpath, men XML tilbyr også fordeler tilbake igjen. Kombinasjonen XML - XSL- XHTML glir jo veldig godt inn i et webmiljø, men har ingen fasit jeg. SAX er vel egentlig litt på vei ut (?) og DOM har vertfall mye bedre støtte i PHP Lenke til kommentar
Asterisk Skrevet 29. mars 2007 Del Skrevet 29. mars 2007 Kan vise deg eksempel på skriving til XML-fil med DOM og skriving til mysql-database med de samme attributtene. xml strukturen: Klikk for å se/fjerne innholdet nedenfor <atikler> <artikkel id="" publisert=""> <brukernavn></brukernavn> <overskrift></overskrift> <artikkelen></artikkelen> <kategori></kategori> <bilder> <bildene> <bilde id="" nummer=""/> </bildene> </bilder> <dato></dato> <tid></tid> </artikkel> </artikler> Skriving med DOM og php til xml-fila: Klikk for å se/fjerne innholdet nedenfor private function skriv_artikler() { # Henter post verdiene $kategori = $this->hent_kategori(); $overskrift = $this->hent_overskrift(); $artikkel = $this->hent_artikkel(); $brukernavn = $this->admin->returner_innlogget_bruker(); $bilde_array = $this->hent_bilder_array(); if(isset($bilde_array)) {$bilde_id = 1;} else {$bilde_id = 0;} if(isset($_POST["publisere"])) {$publisert = 1;} else {$publisert = 0;} # Dato og tid for når artikkelen ble lagret $dato = date("d/m-Y"); $tid = date("G:i:s"); # Oppretter en instanse av domDocument $dom_doc = new domDocument(); # Overse mellomrom $dom_doc->preserveWhiteSpace = false; # Laster inn xml-filen $dom_doc->load("artikler.xml"); # Referer til rotnoden <artikler> $rotnode = $dom_doc->documentElement; # Oppretter en instanse XPath $xpath = new domXPath($dom_doc); # Sjekker om det <artikler> har barnenoder. Hvis ikke settes siste_id lik 0 $har_barn = $rotnode->hasChildNodes(); if($har_barn) { # Sjekker om det finnes en <artikkel> med id lik 2. Hvis ikke settes siste_id lik 1 $bruker_id = $xpath->query("//artikkel[@id='2']")->item(0)->nodeValue; if(empty($bruker_id)) {$siste_id = 1;} else { # Henter den siste id-verdien til artiklene <artikkelen> $siste_id = $rotnode->lastChild->getAttribute("id"); } } else {$siste_id = 0;} # Oppretter nodene $ny_artikkel = $rotnode->appendchild(new domElement("artikkel")); // <artikkel> $ny_artikkel->setAttribute("id", $siste_id+1); // attributt id til <artikkel> $ny_artikkel->setAttribute("publisert", $publisert); // attributt publisert til <artikkel> $ny_artikkel->appendchild(new domElement("brukernavn", utf8_encode($brukernavn))); // <brukernavn> $ny_artikkel->appendchild(new domElement("overskrift", utf8_encode($overskrift))); // <overskrift> $ny_artikkel->appendchild(new domElement("artikkelen", utf8_encode($artikkel))); // <artikkelen> $ny_artikkel->appendchild(new domElement("kategori", $kategori)); // <kategori> $bilder = $ny_artikkel->appendChild(new domElement("bilder")); // <bilder> if(isset($bilde_array)) { foreach($bilde_array as $bilde) { $nummer += 1; $bildene = $bilder->appendChild(new domElement("bildene")); // <bildene> $bilde_node = $bildene->appendchild(new domElement("bilde", utf8_encode($bilde))); // <bilde> $bilde_node->setAttribute("id", $bilde_id); // attributt id til <bilde> $bilde_node->setAttribute("nummer", $nummer); // attributt nummer til <bilde> } } $ny_artikkel->appendchild(new domElement("dato", $dato)); // <dato> $ny_artikkel->appendchild(new domElement("tid", $tid)); // <tid> # For å få en fin utputt i xml-dokumentet $dom_doc->formatOutput = true; # Lagrer filen $dom_doc->save("artikler.xml"); } Insetting ved hjelp av php til mysql database: Klikk for å se/fjerne innholdet nedenfor $artikkel = mysql_query("INSERT INTO `artikler` (`id` , `brukernavn` , `artikkelen` , `kategori` , `dato` , `tid`) VALUES ('' , '$brukernavn' , '$artikkelen' , '$kategori' , '$dato' , '$tid')") or die ("Problem med innsetting av ny artikkel"); $bilder = mysql_query("INSERT INTO `bilder` (`id` , `bilde` , `artikkelid`) VALUES ('' , '$bilde' , '$artikkelid')") or die ("Feil ved innsetting av bilde"); Det å lagre til xml-filer ved hjelp av DOM og php er ikke komplisert. Det kan bare ta litt tid før du får kontroll over det hele. Men da dette er gjort er det mer smak og behag i følge meg over hva du velger. Litt mer å skrive enn ved lagring til en database. Lenke til kommentar
PHPdude Skrevet 29. mars 2007 Del Skrevet 29. mars 2007 Nåja, det XML-eksempelet ditt var da unødvendig rotete. Eksempelet mitt nedenfor laster en eksisterende XML-fil , legger til en ny artikkel og lagrer filen igjen: <?php $xml = new SimpleXMLElement('artikler.xml', null, true); $artikkel = $xml->addChild("artikkel"); $artikkel->brukernavn = 'Ola'; $artikkel->overskrift = 'Test'; $artikkel->aritkkelen = 'Hei på deg!'; $artikkel->kategori = 'Test'; $artikkel->bilder->bilde = 'bilde.jpg'; $artikkel->dato = '2007-03-29'; $artikkel->tid = '15:55'; file_put_contents('artikler.xml', $xml->asXml()); ?> Lenke til kommentar
loathsome Skrevet 29. mars 2007 Del Skrevet 29. mars 2007 Anbefaler deg å titte på SXML (SimpleXML) først. Dette skal i de fleste tilfeller dekke alle behov, og dersom du likevel trenger DOM-mulighetene, er det utrolig enkelt å konvertere et SXML-objekt til et DOM-objekt. loathsome+ Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå