Hej För att lösa detta med Dataset måste du tänka i tabeller och relationer (DS är typ en databas i minnet) Tack för tipset. Ska kolla igenom länkarna och se vad jag kan göra. Återkommer säkert med fler frågor ;) Hej. Vid närmare eftertanke tycker jag du ska köra XSLT. Jag löste problemet med hjälp av XSLT som du föreslog och det fungerade. Tack så mycket för hjälpen.Xml till dataset - utläsning av childnode
Jag har en xml-fil som jag läser in till ett dataset som jag sedan har kopplat en repeater till. Detta fungerar utmärkt. Med ett stort men... xml-filen innehåller en root-nod, som i sin tur innehåller en nod vid namn "car", denna nod innehåller i sin tur en massa element. Dessa element går utmärkt att läsa. Men "car"-noden innehåller även en "image"-nod som i sin tur innehåller ett element "images". Hur får jag ut datan ur detta element från en repeater? Jag vet att datasetet innehåller noden då jag kommer åt den genom ds.Tables["image"].Rows[0][0].ToString(); för att komma åt de andra elementen ändrar jag Tables["image"] till Tables["car"].
Koden som jag användt i code-behind ser ut så här:
<code>
protected void Page_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds.ReadXml("sökväg till cars.xml", XmlReadMode.Auto);
begagnat.DataSource = ds;
begagnat.DataBind();
}
</code>
Och i aspx-filen så här:
<code>
<asp:Repeater ID="begagnat" runat="server">
<ItemTemplate>
<strong>
<%# DataBinder.Eval(Container.DataItem, "brand") %>
<%# DataBinder.Eval(Container.DataItem, "model") %>
</strong>
<%# DataBinder.Eval(Container.DataItem, "regno") %>
<%# DataBinder.Eval(Container.DataItem, "modeldescription") %>
<%# DataBinder.Eval(Container.DataItem, "yearmodel") %>
<%# DataBinder.Eval(Container.DataItem, "firstreg") %>
<%# DataBinder.Eval(Container.DataItem, "miles") %>
<%# DataBinder.Eval(Container.DataItem, "price-sek") %>
<%# DataBinder.Eval(Container.DataItem, "bodytype") %>
<%# DataBinder.Eval(Container.DataItem, "info") %>
<%# DataBinder.Eval(Container.DataItem, "gearboxtype") %>
<%# DataBinder.Eval(Container.DataItem, "fueltype") %>
<%# DataBinder.Eval(Container.DataItem, "fax") %>
<%# DataBinder.Eval(Container.DataItem, "color") %>
<%# DataBinder.Eval(Container.DataItem, "phone") %>
</ItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
</asp:Repeater>
</code>
Xml-filen ser ut så här:
<code>
<cars>
<car>
<regno>PBX210</regno>
<brand>Audi</brand>
<model>A6</model>
<modeldescription> 1,8 T</modeldescription>
<yearmodel>2000</yearmodel>
<firstreg></firstreg>
<miles>16700</miles>
<price-sek>104500</price-sek>
<bodytype>Sedan</bodytype>
<fax>0510-65656</fax>
<color>Silvermetallic</color>
<phone>0510-62350</phone>
<homepage>http://www.klangsbilservice.se</homepage>
<email>anders@lidkoping.peugeot.se</email>
<information>ABS bromsar, ACC/Klimatanläggning</information>
<gearboxtype>Manuell</gearboxtype>
<fueltype>Bensin</fueltype>
<seller>Klangs Bilservice AB</seller>
<images>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/PBX210-1000.jpg</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/PBX210-2020.jpg</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/PBX210-2040.jpg</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/PBX210-2060.jpg</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/PBX210-2080.jpg</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/PBX210-2100.jpg</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/</image>
<image>http://www.bytbil.com/images/klangsbilservicelidkoping/</image>
</images>
</car>
</cars>
</code>
Hoppas det är någon som kan hjälpa mig.
/MalinSv: Xml till dataset - utläsning av childnode
altså du skulle behövt:
<image>
<regno>ABC123</regno>
<URL>http://www.bytbil.com/images/klangsbilservicelidkoping/PBX210-1000.jpg</URL>
</image>
och då kunde du fått tag på barnen (images) till varje regno.
(DataRow.GetChildRows)
Du får alltså lägga till detta i XML-filen och sedan ska du skapa en Relation mellan fälten
[regno] i tabellerna.
http://www.aspxlab.com/doc/populate_parent_child_key.html
Men i det här fallet kanske du ska fundera på en annan lösning.
Jag skulle föreslå:
1. Bind till XmlDocument.
Exempel: http://blogs.msdn.com/kaevans/archive/2003/07/04/9713.aspx
2. Använd inte databinding. Kör XSL-transform från XML till HTML i stället.
Se här: http://www.xmlfiles.com/articles/sample_chapters/sams_xmlforaspnet/default.asp
(edit: jag tänkte .Net 1.1 men jag tror inte det är så mycket skillnad med detta i 2.0)Sv:Xml till dataset - utläsning av childnode
Sv:Xml till dataset - utläsning av childnode
Jag kan tyvärr inte ändra något i xml-filen eftersom den inte är "min" utan läses in från en annan applikation. Jag har kollat lite på att binda till XMLDocument och det verkar fungera fint. Men jag kan inte riktigt förstå det där med XSL-transform. Kan du förklara idén bakom?
Går det inte att binda det till en repeater verkligen? Jag behöver bara ha tag i url för bilderna och ladda dessa i en img-taggs src. Går det inte att lösa med nästlade repeaters på något sätt. Som det är nu får jag ut samtliga url för bilderna under aktuell bil. Men jag skulle som sagt behöva dela på dem så de inte hamnar i samma img-tagg.
Problemet är att jag gör detta åt en annan kille och han kan ingen asp.net programmering alls utan vill bara ha ut resultatet så att han kan styla det med html sedan själv. Därför mitt val av repeatern.
Tacksam för hjälp....Sv: Xml till dataset - utläsning av childnode
Det står för eXtensible Stylesheet Transform, och tanken är att du med XML
beksriver hur ett visst XML-dokument skall omformas till XML eller HTML eller egentligen vad som helst.
Man laddar in XSLT-filen och XML-filen i en transform-motor (XslTransform Class) som spottar ur sig ett nytt dokument. Detta presterar väldigt bra och är mycket flexibelt. När lösningen är klar är det lätt att ändra utseendet bara genom att ändra lite i XSL-filen.
Kolla på länken jag tipsade om
http://www.xmlfiles.com/articles/sample_chapters/sams_xmlforaspnet/default.asp
Det är en del att lära sig men när man kan det så löser du alla liknande problem lekande lätt :)Sv:Xml till dataset - utläsning av childnode