Bonjour,
J'ai un soucis avec la lecture de fichier XML. Je souhaiterais automatisé une partie de la lecture d'un fichier XML car on retrouve plusieurs fois les même type de données.
Voici un exemple de mon fichier XML:
Voici le Code pour lire la première partie "Global_Parameters". Ce code fonctionne bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 <Parameters> <Global_Parameters> <BorderSizeXLeft>1,6</BorderSizeXLeft> <BorderSizeXRight>1,3</BorderSizeXRight> <BorderSizeYTop>1,6</BorderSizeYTop> <BorderSizeYBottom>0,4</BorderSizeYBottom> <BorderOutLengthMin>0,5</BorderOutLengthMin> <BorderInLenghtMin>0,5</BorderInLenghtMin> <NbOverThresold>0,1</NbOverThresold> <NbHorizontalBandsToAnalyze>10</NbHorizontalBandsToAnalyze> <NbBandsToBeFound>1</NbBandsToBeFound> <NbPixForScan>10</NbPixForScan> <RatioDeltaPosXY>0,2</RatioDeltaPosXY> <RatioDeltaLengthWH>0,2</RatioDeltaLengthWH> <NoiseThreshold>100</NoiseThreshold> <BarcodeThreshold>50</BarcodeThreshold> <NbDecoding>20</NbDecoding> <NbBarcode>1</NbBarcode> </Global_Parameters> <Bands_Parameters> <Number_of_Bands>7</Number_of_Bands> </Bands_Parameters> <Bande0> <Name>C</Name> <Pos_X>33,3</Pos_X> <Delat_Pos_X>0,05</Delat_Pos_X> <Width>0,55</Width> <Delat_Width>0,05</Delat_Width> <Test_Band>True</Test_Band> <Threshold>13</Threshold> </Bande0> <Bande1> <Name>1</Name> <Pos_X>6,6</Pos_X> <Delat_Pos_X>0,05</Delat_Pos_X> <Width>0,55</Width> <Delat_Width>0,05</Delat_Width> <Test_Band>False</Test_Band> <Threshold>13</Threshold> </Bande1> <Bande2> <Name>2</Name> <Pos_X>8,9</Pos_X> <Delat_Pos_X>0,05</Delat_Pos_X> <Width>0,55</Width> <Delat_Width>0,05</Delat_Width> <Test_Band>False</Test_Band> <Threshold>13</Threshold> </Bande2> <Bande3> <Name>3</Name> <Pos_X>11,7</Pos_X> <Delat_Pos_X>0,05</Delat_Pos_X> <Width>0,55</Width> <Delat_Width>0,05</Delat_Width> <Test_Band>False</Test_Band> <Threshold>13</Threshold> </Bande3> <Bande4> <Name>4</Name> <Pos_X>14,2</Pos_X> <Delat_Pos_X>0,05</Delat_Pos_X> <Width>0,55</Width> <Delat_Width>0,05</Delat_Width> <Test_Band>False</Test_Band> <Threshold>13</Threshold> </Bande4> <Bande5> <Name>5</Name> <Pos_X>17</Pos_X> <Delat_Pos_X>0,05</Delat_Pos_X> <Width>0,55</Width> <Delat_Width>0,05</Delat_Width> <Test_Band>False</Test_Band> <Threshold>13</Threshold> </Bande5> <Bande6> <Name>6</Name> <Pos_X>22,8</Pos_X> <Delat_Pos_X>0,05</Delat_Pos_X> <Width>0,55</Width> <Delat_Width>0,05</Delat_Width> <Test_Band>False</Test_Band> <Threshold>13</Threshold> </Bande6> </Parameters>
Pour la seconde partie, j'aimerais créer une itération ou méthode afin d'optimiser la lecture des informations de "Bande". Je me renseigne actuellemenent sur les méthodes XmlDocument, XmlNode... mais suis un peu perdu et noyer par toutes les informations que je trouve.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 System.Globalization.RegionInfo ri = System.Globalization.RegionInfo.CurrentRegion; string Comma1; string Comma2; if (ri.Name == "FR") { Comma1 = "."; Comma2 = ","; } else { Comma1 = ","; Comma2 = "."; } try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(@XMLFile); XmlNode Data; XmlElement Elm = xmlDoc.DocumentElement; Doc.SelectNodes DataSet dt = new DataSet() ; dt.ReadXml(@XMLFile); XmlTextReader reader = new XmlTextReader(@XMLFile); reader.WhitespaceHandling = WhitespaceHandling.None; while (reader.Read()) { if (reader.LocalName == "BorderSizeXLeft") BorderSizeXLeft = Double.Parse(reader.ReadString().Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "BorderSizeXRight") BorderSizeXRight = Double.Parse(reader.ReadString().Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "BorderSizeYTop") BorderSizeYTop = Double.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "BorderSizeYBottom") BorderSizeYBottom = Double.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "BorderOutLengthMin") BorderOutLengthMin = Double.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "BorderInLenghtMin") BorderInLenghtMin = Double.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "NbOverThresold") NbOverThresold = Double.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "NbHorizontalBandsToAnalyze") NbHorizontalBandsToAnalyze = Int32.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "NbBandsToBeFound") NbBandsToBeFound = Int32.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "NbPixForScan") NbPixForScan = Int32.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "RatioDeltaPosXY") RatioDeltaPosXY = Double.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "RatioDeltaLengthWH") RatioDeltaLengthWH = Double.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "NoiseThreshold") NoiseThreshold = Byte.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "BarcodeThreshold") BarcodeThreshold = Byte.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "NbDecoding") NbDecoding = Int32.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); if (reader.LocalName == "NbBarcode") NbBarcode = Int32.Parse(reader.Value.Trim().Replace(Comma1, Comma2)); } } catch { MessageBox.Show("At least one value in xml file is wrong."); }
Si qq'un à un exemple correspondant à mon problème, ou un avis critique sur la technique à utiliser, ou n'importe quoi pouvant cibler mes recherche, je suis preneur.
Merci d'avance.
Partager