15. december 2004 - 00:17
Der er
3 kommentarer og 1 løsning
Læse XML out-memory
Jeg har en XML-fil med følgende format: ----- <?xml version="1.0" encoding="utf-8" ?> <fields> <syncfield> <name>Test</name> <allowInsert>true</allowInsert> <allowDelete>true</allowDelete> </syncfield> <syncfield> <name>Test2</name> <allowInsert>false</allowInsert> <allowDelete>true</allowDelete> </syncfield> </fields> ------------ Hvordan læser jeg den mest optimalt når jeg 1) ikke vil opbevare læste data (altså out-memory) 2) ønsker at kunne tilgå et element med navnet Har har en idé om at XPath er en mulig løsning? Min idé: XmlTextReader reader = new XmlTextReader(File.OpenRead(XmlRulesPath)); while(flere_syncfields){ Console.WriteLine(aktuelt_syncfield_name); Console.WriteLine(aktuelt_syncfield_allowInsert); Console.WriteLine(aktuelt_syncfield_allowDelete); } Hvordan stiller jeg det op i kode?
Annonceindlæg fra Barco
Er jeres mødelokaler sikre nok?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
15. december 2004 - 18:16
#1
Et par eksempler på henholdsvis in memory DOM træ og en sekventiel pull parsning: using System; using System.Xml; namespace E4 { class MainClass { public static void Main(string[] args) { XmlDocument doc = new XmlDocument(); doc.Load(@"C:\field.xml"); XmlNode field = doc.DocumentElement.SelectSingleNode("syncfield[name='Test']"); foreach(XmlNode children in field.ChildNodes) { Console.WriteLine(children.Name + " = " + children.FirstChild.Value); } } } } og using System; using System.IO; using System.Xml; namespace E5 { class MainClass { public static void Main(string[] args) { XmlTextReader xtr = new XmlTextReader(new StreamReader(@"C:\field.xml")); while(!xtr.EOF) { if(xtr.IsStartElement() && xtr.Name == "name") { Console.WriteLine("name = " + xtr.ReadString()); } if(xtr.IsStartElement() && xtr.Name == "allowInsert") { Console.WriteLine("allowInsert = " + xtr.ReadString()); } if(xtr.IsStartElement() && xtr.Name == "allowDelete") { Console.WriteLine("allowDelete = " + xtr.ReadString()); } xtr.Read(); } } } }