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>
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
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.