04. december 2004 - 10:58
Der er
17 kommentarer og 1 løsning
Tilføje / Slette bruger fra XML dokument
Det jeg søger er en metode til henholdsvis at tilføje en bruger og slette en bruger udfra brugernavn. Mit XML dokument ser sådan her ud: <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="birdusers.xsl"?> <programnavn> <users> <user> <name>test</name> <password>test</password> <home>c:</home> <activated>yes</activated> </user> <user> <name>test2</name> <password>test2</password> <home>c:</home> <activated>yes</activated> </user> </users> </programnavn> Jeg har lavet en metode til at checke login, og den virker fint. Men kan ikke rigtigt få de 2 andre til at virke. public bool ValidLogin(string pass) { XmlDocument doc = new XmlDocument(); doc.Load("users.xml"); foreach (XmlNode node in doc.SelectNodes("/programnavn/users/user")) { if ((node.SelectSingleNode("name").InnerText.Equals(user)) && (node.SelectSingleNode("password").InnerText.Equals(pass)) && (node.SelectSingleNode("activated").InnerText.Equals("yes"))) { root = node.SelectSingleNode("home").InnerText; return true; } } return false; }
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
04. december 2004 - 11:10
#2
Og du fjerner fra et element med RemoveChild metode.
04. december 2004 - 11:14
#3
Vil jeg da lige gøre
04. december 2004 - 11:22
#4
Ellers kan jeg da godt prøve at lave et komplet eksempel.
04. december 2004 - 11:41
#5
Fixede en opret bruger, ser det ikke meget rigtigt ud? Er lidt i tvivl om XmlNode user = doc.CreateElement("/users/user"); public void OpretBruger(string brugernavn, string password, string home, string activated ) { XmlDocument doc = new XmlDocument(); doc.Load("blabla.xml"); XmlNode bruger = doc.CreateElement("name"); bruger.AppendChild(doc.CreateTextNode(brugernavn)); XmlNode pass = doc.CreateElement("password"); pass.AppendChild(doc.CreateTextNode(password)); XmlNode homeDir = doc.CreateElement("home"); homeDir.AppendChild(doc.CreateTextNode(home)); XmlNode act = doc.CreateElement("activated"); act.AppendChild(doc.CreateTextNode(activated)); XmlNode user = doc.CreateElement("/users/user"); user.AppendChild(bruger); user.AppendChild(pass); user.AppendChild(homeDir); user.AppendChild(act); doc.DocumentElement.AppendChild(user); doc.Save("blabla.xml"); }
04. december 2004 - 11:52
#6
Det er ikke rigtigt. Jeg laver lige et eksempel !
04. december 2004 - 11:52
#7
using System; using System.Xml; namespace E4 { public class Users { private string filename; private XmlDocument doc; public Users(string filename) { this.filename = filename; doc = new XmlDocument(); doc.Load(filename); } public bool IsValid(string username, string password) { XmlNode userelm = doc.SelectSingleNode("programnavn/users/user[name='" + username + "' and password='" + password + "']"); return (userelm != null); } public void Add(string username, string password) { XmlNode usernameelm = doc.CreateElement("name"); usernameelm.AppendChild(doc.CreateTextNode(username)); XmlNode passwordelm = doc.CreateElement("password"); passwordelm.AppendChild(doc.CreateTextNode(password)); XmlNode homeelm = doc.CreateElement("home"); homeelm.AppendChild(doc.CreateTextNode("C:")); XmlNode activatedelm = doc.CreateElement("activated"); activatedelm.AppendChild(doc.CreateTextNode("No")); XmlNode userelm = doc.CreateElement("user"); userelm.AppendChild(usernameelm); userelm.AppendChild(passwordelm); userelm.AppendChild(homeelm); userelm.AppendChild(activatedelm); doc.DocumentElement.FirstChild.AppendChild(userelm); doc.Save(filename); } public void Remove(string username) { XmlNode userelm = doc.SelectSingleNode("programnavn/users/user[name='" + username + "']"); userelm.ParentNode.RemoveChild(userelm); doc.Save(filename); } } class MainClass { public static void Main(string[] args) { Users usr = new Users(@"C:\users.xml"); Console.WriteLine(usr.IsValid("test2", "test2")); Console.WriteLine(usr.IsValid("test", "xxx")); Console.WriteLine(usr.IsValid("test3", "test3")); usr.Add("test4", "test4"); usr.Remove("test"); } } }
04. december 2004 - 11:53
#8
Jeg appender det createde element til første element under document root.
04. december 2004 - 11:54
#9
Og så udnyttede jeg XPath lidt mere end dit oprindelige eksempel.
04. december 2004 - 12:09
#10
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. Får den der når jeg prøver at slette en bruger som ikke eksistere, jeg skal bare losse remove delen ind i en try catch block for at forhindre programmet går ned?
04. december 2004 - 12:12
#11
public void Remove(string username) { XmlNode userelm = doc.SelectSingleNode("programnavn/users/user[name='" + username + "']"); if(userelm != null) { userelm.ParentNode.RemoveChild(userelm); doc.Save(filename); } else { // eksisterer ikke } }
04. december 2004 - 12:17
#12
Jeg siger mange tak for hjælpen :) Smider du et svar...
04. december 2004 - 12:18
#13
kommer her
04. december 2004 - 12:34
#14
Nu man har fat i dig, har nemlig også et andet problem. <?xml version="1.0" encoding="ISO-8859-1"?> <serverconfig> <port>21</port> <name>xxxx</> <version>1.0</version> </serverconfig> Kan man relativt nemt hente de ting ud og smide dem i et objekt? Ville være rart at kunne gøre vores applikation lidt mere dynamisk så vi kunne angive porten i et externt dokument.
04. december 2004 - 12:34
#15
Kan godt oprette et nyt spørgsmål hvis du vil have point for det
04. december 2004 - 12:36
#16
.NET har en framework for config filer.
04. december 2004 - 12:38
#17
04. december 2004 - 12:38
#18
oki, takker :)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.