Ik ben een monitor tooltje aan het maken. Deze moet bijvoorbeeld bepaalde processen in de gaten kunnen houden, logfiles kunnen analyseren en bv filesize van bepaalde files kunnen checken.
Ik wil de configuratie in een grote XML file.
bijvoorbeeld:
Nu wil ik het volgende bereiken. Ik wil een algemene ConfigReader functie. Deze leest de XML file door (met XmlReader). Zodra hij het <processmonitor> element tegenkomt moet hij de XmlReader doorgeven aan een functie die het <processmonitor></processmonitor> gedeelte uitleest, en dan weer terug gaat zodat de algemene ConfigReader kan doorgaan naar bv het <filemonitor> gedeelte.
dit is de algemene ConfigReader:
dus, voor elke case word de ConfigReader van het desbetreffende onderdeel aangeroepen.
De ConfigReaders voor elk onderdeel hebben een soortgelijke structuur, alleen word hierin de informatie die in de Xml file staat verwerkt.
op zich werkt dit idee goed, het enige probleem is dat als een element childs heeft, hij deze niet goed leest. Volgens mij moet ik iets van:
in de while loop zetten boven aan bij de deel ConfigReaders, alleen ik heb dit geprobeerd (op diverse manieren), maar dit heeft niet het gewenste resultaat.
Kan iemand me helpen met dit probleem?
Ik wil de configuratie in een grote XML file.
bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?xml version="1.0"?>
<config>
<processmonitor>
<process warninglevel="1" number="2">notepad</process>
<process warninglevel="2" number="2">mspaint</process>
<process warninglevel="3" number="1">winlogon</process>
<process warninglevel="3" number="1">workpace</process>
</processmonitor>
<logfilemonitor>
<file path="foo.log">
<string warninglevel="1">ERROR</string>
<string warninglevel="2">WARNING</string>
<string warninglevel="3">TEST</string>
</file>
<file path="bar.log">
<string warninglevel="3">PIET</string>
<string warninglevel="2">WARNING</string>
<string warninglevel="1">TEST</string>
</file>
</logfilemonitor>
</config> |
Nu wil ik het volgende bereiken. Ik wil een algemene ConfigReader functie. Deze leest de XML file door (met XmlReader). Zodra hij het <processmonitor> element tegenkomt moet hij de XmlReader doorgeven aan een functie die het <processmonitor></processmonitor> gedeelte uitleest, en dan weer terug gaat zodat de algemene ConfigReader kan doorgaan naar bv het <filemonitor> gedeelte.
dit is de algemene ConfigReader:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| public void ReadConfig(string ConfigPath)
{
//Validate the config file with the DTD
XmlReader ConfigReader = new XmlTextReader(ConfigPath);
XmlValidatingReader reader = new XmlValidatingReader(ConfigReader);
reader.ValidationType = ValidationType.DTD;
//Read Config File
while (ConfigReader.Read())
{
//Node is no end-element
if (ConfigReader.NodeType == XmlNodeType.Element)
{
//Read element names
switch (ConfigReader.LocalName)
{
//Read root element
case "config":
{
break;
}
case "processmonitor":
{
MainProcessMonitor = new Monitor.GenericMonitor.ProcessMonitor();
Console.WriteLine("processmonitor: \t" + MainProcessMonitor.ReadConfig(ConfigReader));
break;
}
case "logfilemonitor":
{
MainLogMonitor = new Monitor.GenericMonitor.LogMonitor();
Console.WriteLine("logfilemonitor: \t" + MainLogMonitor.ReadConfig(ConfigReader));
break;
}
(...) |
dus, voor elke case word de ConfigReader van het desbetreffende onderdeel aangeroepen.
De ConfigReaders voor elk onderdeel hebben een soortgelijke structuur, alleen word hierin de informatie die in de Xml file staat verwerkt.
op zich werkt dit idee goed, het enige probleem is dat als een element childs heeft, hij deze niet goed leest. Volgens mij moet ik iets van:
code:
1
2
3
| while (ConfigReader.Read( ) && (ConfigReader.NodeType == XmlNodeType.Element ||
ConfigReader.NodeType == XmlNodeType.Whitespace))
{ |
in de while loop zetten boven aan bij de deel ConfigReaders, alleen ik heb dit geprobeerd (op diverse manieren), maar dit heeft niet het gewenste resultaat.
Kan iemand me helpen met dit probleem?
[ Voor 11% gewijzigd door Verwijderd op 07-11-2005 10:45 ]