webForumDet fria alternativet

XML till Hashtable

4 svar · 202 visningar · startad av renholm

renholmMedlem sedan apr. 20012 266 inlägg
#1

Har nu försökt läsa in en xml fil som ser ut så här

<?xml version="1.0" encoding="utf-8" ?>
<ConfigFiles>
	<Graphic>Graphic.xml</Graphic>
	<Security>Security.xml</Security>
	<Web>Web.xml</Web>
	<WebService>WebService.xml</WebService>
</ConfigFiles>

till en Hshtable då jag vill ha t.ex <Graphic> som key och sedan Graphic.xml som värde, har försökt med BinaryFormatter, XMLSerialization(heter det så?) samt SoapFormatting utan att lyckas, borde jag kanske försöka med att läsa xml filen rad för rad och lägga in?

developerMedlem sedan aug. 2001458 inlägg
#2

Det beror på hur du menar. Är det ett bestämda element i ConfigFiles är en XmlSerializer rätt trevlig, då får du en klass, och så får du själv lägga till i hashtabellen för varje element. typ såhär:

public class ConfigFiles {
	public String Graphic;
	public String Security;
	public String Web;
	public String WebService;
}

class Test {
	static void Main() {
		StreamReader reader = new System.IO.StreamReader(@"c:\ConfigFiles.xml");
		XmlSerializer serializer = new XmlSerializer(typeof(ConfigFiles));
		ConfigFiles configFiles = (ConfigFiles) serializer.Deserialize(reader);

		Hashtable ht = new Hashtable();
		// lägg till varje element såhär
		ht.Add("Graphics", configFiles.Graphic);
	}
}

(För så få element skulle jag nog skippa hashtabellen och jobba direkt med configFiles-klassen istället)

renholmMedlem sedan apr. 20012 266 inlägg
#3

Anledningen till att jag valde just Hashtable är att jag tänkte att det skulle vara rätt dynamiskt så jag slipper ändra i ConfigFiles classen varje gång jag kanske vill lägga till en fil. Annars fungerar XmlSerializer alldeles utmärkt.

developerMedlem sedan aug. 2001458 inlägg
#4

Isåfall kanske xpath är bättre, typ:

XPathDocument doc = new XPathDocument(new XmlTextReader(new StreamReader(@"c:\ConfigFiles.xml")));
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator iterator = nav.Select("/ConfigFiles/*");
while (iterator.MoveNext()) {
	Console.WriteLine("<{0}> = {1}", iterator.Current.Name, iterator.Current.Value);
}
renholmMedlem sedan apr. 20012 266 inlägg
#5

tack, precis vad jag letade efter.

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)