Svish Skrevet 14. august 2007 Skrevet 14. august 2007 (endret) Jeg bare lurte på om noen hadde noen gode tips til hvordan jeg burde gjøre dette: Jeg har en mysql database på nettet med en table i. Den har en DATE og to tekstfelt, en tittel og en innhold. Den har en rad per dato i året. så 2007-01-01 og helt til 2007-12-31. Det som ligger der er en rekke tekster som skal dukke opp på en skjermsparer. Og for øyeblikket så henter programmet bare denne teksten ved hjelp av en webside som henter det ut. Men dette vil jo si at det kreves netttilgang. Og strengt tatt er jo ikke det nødvendig. Hvordan bør jeg lagre dette lokalt for å enkelt kunne bruke det i skjermspareren? Jeg tenker at xml måtte fungere greit, men er ikke helt inne i det. Og har i hvert fall ikke peiling på hvordan en bør gjøre det i C#. Strukturen kunne vel vært noe sånt som <tekster> <tekst> <dato>2007-07-01</dato> <tittel>En tekst</tittel> <innhold>Bla bla</innhold> </tekst> <tekst> ... </tekst> </tekster> Men hvordan bruker man det effektivt i C#? bør man ha noe sånn xsd filereller sånt for eksempel? er det enkelt å finne tittel og innhold for en viss dato hvis man har det lagret sånn? Endret 14. august 2007 av Tussi_qwerty
Manfred Skrevet 14. august 2007 Skrevet 14. august 2007 Gled deg. System.Xml er en av de teiteste og mest keikete namespacene i .net
Svish Skrevet 14. august 2007 Forfatter Skrevet 14. august 2007 Det var jo oppmuntrende Noe du anbefaler å bruke istedet?
Manfred Skrevet 14. august 2007 Skrevet 14. august 2007 For min del skriver jeg koden "manuelt" for å lagre til xml, og bruker bare System.Xml til innlesingen. Jeg synes det er ekstremt tumlete å lagre xml ved hjelp av System.Xml
serverside Skrevet 14. august 2007 Skrevet 14. august 2007 (endret) Ja, lage xml med .NET er tungvindt. Mye enklere å bruke StringBuilder el. Når det gjelder presentasjon av XML er .NET veldig bra. Dersom du skal presentere xml-data bør du selvsagt bruke XSL (ligger ferdig controls i .NET som ordner dette), men hvis du skal ta ut verdier vha kode kan dette kanskje funke for deg: XmlDocument xmlDoc; xmlDoc.LoadXml("XmlDataSomTextString"); string tittel = xmlDoc.SelectSingleNode("tekster/tekst/tittel").InnerXml; Endret 14. august 2007 av serverside
Svish Skrevet 14. august 2007 Forfatter Skrevet 14. august 2007 (endret) Hm, tror kanskje det jeg gjør nå er ganske lurt Så kan jo dele det dersom andre skulle trenge det samme. Men dere må si ifra hvis jeg har gjort noen åpenbare brølere eller om noe kan gjøres veldig mye mer lettvint eller sånt. Xml documentet ser nå slik ut: <?xml version="1.0" encoding="utf-8" ?> <texts> <text date="2007-01-01" ref="something">blah blah</text> .... .... </texts> For å opprette XmlDocument bruker jeg følgende: XmlReaderSettings xmlReaderSettings = new XmlReaderSettings(); xmlReaderSettings.ConformanceLevel = ConformanceLevel.Document; xmlReaderSettings.IgnoreWhitespace = true; xmlReaderSettings.IgnoreComments = true; XmlReader xmlReader = XmlReader.Create(xmlFile, xmlReaderSettings); xmlDocument = new XmlDocument(); xmlDocument.Load(xmlReader); For så å finne den med riktig dato bruker jeg: foreach (XmlElement xe in xmlDocument["texts"].ChildNodes) { if (xe.Attributes["date"].InnerXml == DateTime.Today.ToString("yyyy-MM-dd")) { Console.WriteLine(xe.Attributes["ref"].InnerXml); Console.WriteLine(xe.InnerXml); break; } } Endret 14. august 2007 av Tussi_qwerty
serverside Skrevet 14. august 2007 Skrevet 14. august 2007 Din løsning ser veldig fornuftig ut. Selv ville jeg nok valgt å bruke XSL, men det du har laget fungerer fint. Grunnen til at jeg vile brukt XSL er ytelse og at det er litt lettere å gjøre endringer på måten dataene blir presentert på. (slipper å kode/kompilere). Men som sagt: fin løsning det der
Svish Skrevet 14. august 2007 Forfatter Skrevet 14. august 2007 Hvordan ville du brukt XSL på det jeg har ovenfor?
serverside Skrevet 14. august 2007 Skrevet 14. august 2007 hvis du (som det kanskje ser ut til) skal presentere data i en Console Application, så blir jo min idè litt vrien. Men dersom du skal presentere på web så bør du kikke på http://www.w3schools.com/xsl/xsl_transformation.asp. XSL inneholder muligheter for å gjøre spørringer (som på dato i ditt tilfelle) og da presentasjon på den måten du ønsker. <?xml version="1.0" encoding="utf-8" ?> <texts> <text id="text1"> <date>2007-01-02</date> <ref>something</ref> <value>bla bla bla 1</value> </text> <text id="text2"> <date>2007-01-01</date> <ref>something</ref> <value>bla bla bla 2</value> </text> <text id="text3"> <date>2007-01-04 </date> <ref>something</ref> <value>bla bla bla 3</value> </text> </texts> <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:for-each select="texts/text"> <xsl:if test="date='2007-01-01'"> <xsl:value-of select="@id"/> <xsl:value-of select="date"/> <xsl:value-of select="ref"/> <xsl:value-of select="value"/> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet> <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>XML/XSL</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Xml TransformSource="trans.xslt" DocumentSource="data.xml" runat="server" /> </div> </form> </body> </html>
Svish Skrevet 14. august 2007 Forfatter Skrevet 14. august 2007 Aha. Men ja, jeg skal bruke det i et C# program ja. Men tror jeg går for min løsning da ja Takk for hjelpen i hvert fall!
Peter Skrevet 8. september 2007 Skrevet 8. september 2007 (endret) XSL er definitivt noe å lære, og veien man burde gå når man skal hente ut data fra XML. Her har du XSL-kode som burde passe til ditt format. <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="text[@date='2007-01-01']"> Text: <xsl:value-of select="." /> Date: <xsl:value-of select="@date" /> Ref: <xsl:value-of select="@ref" /> </xsl:template> Endret 8. september 2007 av Nazgul
Svish Skrevet 10. september 2007 Forfatter Skrevet 10. september 2007 spenstig. og hvordan ville man så bruke det i C#?
Peter Skrevet 10. september 2007 Skrevet 10. september 2007 Sjekk ut System.XML.XPath. XPathDocument doc = new XPathDocument(minFil); XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator it = nav.Select( "//text[@date='2007-01-01']"); while( it.MoveNext() ) { Console.WriteLine( it.Current.Value ); } Med forbehold om skrivefeil. Intellisense i VS burde styre deg i riktig retning. http://www.w3schools.com/ har en del om xsl og xpath, men ser ut som siden er nede akkurat nå.
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å