07. maj 2008 - 13:30Der er
8 kommentarer og 1 løsning
Opdater XML med LINQ
Hej alle sammen. Jeg døjer lidt med et problem da jeg gerne vil update nogen elementer i en XML fil. Den når aldrig at komme ind i foreachen. Så det er tilsyneladende min query som der er noget galt med sikkert.
XML filen ser sådan ud: <?xml version="1.0" encoding="utf-8" ?> <Profile_settings> <Username>Brugernavn</Username> <Password>B58EB230145F496FB52CEE5D69DB7F21</Password> <Lastlogon>07-05-2008 12:05:35</Lastlogon> </Profile_settings>
Den kommer aldrig ind i foreach'en. Elementet doc indeholder: <Profile_settings> <Username>Ziij1nwerqwerq</Username> <Password>B58EB230145F496FB52CEE5D69DB7F21wqerqwerqwer</Password> <Lastlogon>07-05-2008 13:39:10wqerqwerqwerq</Lastlogon> </Profile_settings> Når jeg køre debug.
Ok.. Men altså - der er jo heller ingen descendants i dit document element der hedder settings - i og med selve dit document element jo _er_ settings.
Prøv noget a'la:
class Program { const string xml = "<settings><userName>hrmpf</userName><password>Pa$$w0rd</password></settings>"; static void Main(string[] args) { XElement doc = XElement.Load(new StringReader(xml)); var query = from b in doc.Descendants() select b; foreach (XElement e in query) { Console.WriteLine(e.Name); } } }
Det du lavede virkede heller ikke (Med tilretninger) :(
XElement doc = XElement.Load(xmlFile); var query = (from b in doc.Elements("Profile_settings") select b); foreach (XElement e in query) { e.SetElementValue("Lastlogon", lastlogon); }
Jeg prøvede at lave lidt om på det så det blev doc.elements istedet for Descendants - Ingen ændring
Altså - det eksempel jeg gav dig ryger fint ind i foreach'en. Så kunne forestille mig du har lavet noget galt i dine tilretninger.
Anyway - måske er det ikke det rigtige approach du har valgt til lige sådan noget, som at tilgå specifikke elementer direkte. I øvrigt - hvis det er asp.net, findes der en udmærket profileprovider - der kan de ting du vil der - og samtidig kan gøre det "strongly typed".
XElement doc = XElement.Load(Program._xmlFile); IEnumerable<XElement> xmlsettings = (from b in doc.Elements( "Profile_settings") where ((string)b.Attribute( "Userid")).Equals(userid) select b); foreach (XElement xe in xmlsettings) { xe.SetElementValue("Username", username); xe.SetElementValue("Password", pass); xe.SetElementValue("Lastlogon", lastlogon); } doc.Save(Program._xmlFile);
Jeg fandt selv ud af det. Gav den et element mere det hjalp lidt.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.