07. januar 2012 - 22:19Der er
27 kommentarer og 1 løsning
Hent specifik data i XML fil
Godaften, har kigget lidt rundt og har ikke kunne finde noget om at hente specifik data i xml fil til en hjemmeside.
Da jeg ikke rigtig har arbejdet med XML filer før, vil jeg forklare hvad jeg godt kunne tænke mig, uden så meget fagsprog. :)
Det ser sådan ud at jeg arbejder med at lave en hjemmeside i ASP.NET og skal lave en table hvor jeg skal hente data som har bestemt value i row. Eks. <Vare> <Kategori></Kategori> <VareNavn></VareNavn> <VarePris></VarePris> <Beskrivelse></Beskrivelse> <Billede></Billede> </Vare> Så vil jer gerne gøre så at jeg kun henter de rows som har kategori 2 og ikke viser alle de andre rows hvor kategori har værdi 1, 3, 4 osv.
Jeg bruger et script til at hente data med, det er det fra W3, hvis nogle kender det.
<script type="text/javascript"> if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET", "webshop.xml", false); xmlhttp.send(); xmlDoc = xmlhttp.responseXML;
document.write("<table class=TableCSS>"); document.write("<th class=TableHeader>Kategori</th>"); document.write("<th class=TableHeader>Varenavn</th>"); document.write("<th class=TableHeader>Pris</th>"); var x = xmlDoc.getElementsByTagName("Vare"); for (i = 0; i < x.length; i++) { document.write("<tr>"); document.write("</td><td class=TableData>"); document.write(x[i].getElementsByTagName("Kategori")[0].childNodes[0].nodeValue); document.write("</td><td class=TableData>"); document.write(x[i].getElementsByTagName("VareNavn")[0].childNodes[0].nodeValue); document.write('</td><td align="right" class=TableData>') document.write(x[i].getElementsByTagName("VarePris")[0].childNodes[0].nodeValue); document.write(',-'); document.write("</td></tr>"); } document.write("</table>"); </script>
Jeg vil mene det er her jeg skal rette noget i men, ved ikk om der er en måde hvor jeg kan lave OnlyGetElemtsByTagName eller noget i den stil. :p Har prøvet at se om jeg kunne lave en datasource og smide den ind i et gridview, men det ser ikke ud til at fungere for mig, nogle som har en måde at ordne dette på?
Vil lige prøve at lære XPath så, der ser ikke ud af så meget. :)
Det eksempel du gav virkede desværre ikke, ved ikke om det har noget at gøre med at kategorierne er navne og ikke tal, men det er jo ikke en database med bestemte slags strings så det burde vel være lige meget?
Jeg skal bare have så at på en side, der kan jeg hente alle de varer som har kategori Bundkort og på en anden side skal jeg kunne hente de varer som har kategori CPU. Men det er jo bare den samme måde det gøres på, hvor der bliver skiftet lidt ud i koden, hvis sådan et stykke kode findes. :S Problemet er bare det at den skal kun hente de varer som har kategori Bundkort og ikke andet en dette.
Har søgt lidt rundt og set dig på en del tråde hvad angår XML så holder lidt på at du er min guru til det her. :p
Har set lidt på det nu, opbygningen er: <Webshop> <Vare> <Kategori>Adapter</Kategori> <VareNavn>USB til Parallel Adapter</VareNavn> <VarePris>199</VarePris> <Beskrivelse /> <Billede /> </Vare> <Vare> <Kategori>Adapter</Kategori> <VareNavn>USB til PS/2 Adapter Mus/tastatur</VareNavn> <VarePris>149</VarePris> <Beskrivelse /> <Billede /> </Vare> </Webshop>
Vidste ikk at det webshop var med, fordi det hedder filen også. :)
Haha kan jeg så godt forstå. d: Men hvis nu jeg skal have dem sammen i en eller så at begge kan være på sitet så både IE og FF/Chrome brugere kan se de tables? (: Kan de føres ind i de if, else statements i toppen af scriptet? (:
Har prøvet at teste dem og de fungere utrolig godt, du har bare styr på det der. Har ikke kunnet finde noget om at det første kun var i IE det kunne bruges, det har jeg så fået at se nu. (:
Forstår nok scriptet og hvorfor det virker i IE, det simpelt lavet, men forstår det ikke rigtig da vi kommer til Chrome/FF scriptet. Det er nok mest det som begrænser mig, men er der ikke en løsning på hvordan det kan fungere i alle browsere?
Altså FF metoden virker på mange forskellige browsere hvor den anden kun er IE. Er der så en måde hvorpå man kan få begge metoder ind i scriptet på? :)
Hvad kan jeg så gøre, lave et: var isIE = (navigator.appName=="Microsoft Internet Explorer"); var IEversion = navigator.appVersion; if(isIE) { var it = xmlDoc.evaluate("//Webshop/Vare[Kategori='Grafikkort']", xmlDoc, null, XPathResult.ANY_TYPE, null);
var curr = it.iterateNext(); // FF while (curr) { document.write("<tr>"); document.write("</td><td class=TableData>"); document.write(curr.getElementsByTagName("VareNavn")[0].childNodes[0].nodeValue); document.write('</td><td align="right" class=TableData>') document.write(curr.getElementsByTagName("VarePris")[0].childNodes[0].nodeValue); document.write(',-'); document.write("</td></tr>"); curr = it.iterateNext(); } } else { var x = xmlDoc.selectNodes("/Webshop/Vare[Kategori='Adapter']");
for (i = 0; i < x.length; i++) { document.write("<tr>"); document.write("</td><td class=TableData>"); document.write(curr.getElementsByTagName("VareNavn")[0].childNodes[0].nodeValue); document.write('</td><td align="right" class=TableData>') document.write(curr.getElementsByTagName("VarePris")[0].childNodes[0].nodeValue); document.write(',-'); document.write("</td></tr>"); } }
Eller: <![if IE 7.0]> Script for IE <![endif]> og en for andre browsere
Ej jeg har ingen ide om hvordan jeg skal detektere IE og smide det script ind og hvis ikke så skal den bruge det andet, men det er nok mere simpelt en jeg lige går og tror, :S
Jeg har fundet ud af det nu, tusinde mange gange tak. :D hvis du smider et svar, så vil jeg give point. (: Brugte den første som du sagde, men du får point fordi du har hjulpet mig så meget. :)
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.