Hello ! Me revoila avec encore plus de problemes XML :-)
J'ai le fichier XML suivant que je dois parser pour en extraire des parametres:
Jusqu'a maintenant je n'arrive qu'a extraire le premier element par nom pour un espace de nom donne:
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 <?xml version="1.0" encoding="UTF-8"?> <bulkCmConfigDataFile xmlns:un="utranNrm.xsd" xmlns:xn="genericNrm.xsd" xmlns:gn="geranNrm.xsd" xmlns="configData.xsd" xmlns:es="Vendor1SpecificAttributes.1.0.xsd"> <fileHeader fileFormatVersion="1.0" vendorName="Vendor1"/> <configData dnPrefix="Undefined"> <xn:SubNetwork id="ONRM_ROOT_MO_R"> <xn:SubNetwork id="RNC0001"> <xn:MeContext id="BLABLA"> [...] </xn:MeContext> <xn:MeContext id="MACHIN"> [...] </xn:MeContext> <xn:MeContext id="RNC0001"> <xn:VsDataContainer id="RNC0001"> </xn:VsDataContainer> <xn:ManagedElement id="1"> <un:RncFunction id="1"> <un:UtranCell id="111111A"> <un:attributes> <un:uarfcnUl>9800</un:uarfcnUl> <un:uarfcnDl>10700</un:uarfcnDl> </un:attributes> <xn:VsDataContainer id="111111A"> <es:Position> <es:latitudeSign>1</es:latitudeSign> <es:latitude>3070727</es:latitude> <es:longitude>8786820</es:longitude> </es:Position> </xn:VsDataContainer> <xn:VsDataContainer id="1"> </xn:VsDataContainer> </un:UtranCell> <un:UtranCell id="111111B"> <un:attributes> <un:uarfcnUl>9800</un:uarfcnUl> <un:uarfcnDl>10700</un:uarfcnDl> </un:attributes> <xn:VsDataContainer id="111111B"> <es:Position> <es:latitudeSign>1</es:latitudeSign> <es:latitude>3070555</es:latitude> <es:longitude>8786666</es:longitude> </es:Position> </xn:VsDataContainer> <xn:VsDataContainer id="1"> </xn:VsDataContainer> </un:UtranCell> </un:RncFunction> </xn:ManagedElement> </xn:MeContext> </xn:SubNetwork> </xn:SubNetwork> </configData> <fileFooter dateTime="2011-11-28T08:38:45Z"/> </bulkCmConfigDataFile>
Ce qui me retourne le premier Element "MeContext" (dans ce cas le MeContext avec id=BLABLA)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 XNamespace xn = "genericNrm.xsd"; XNamespace un = "utranNrm.xsd"; var test1 = xmldoc.Descendants(xn + "MeContext").FirstOrDefault();
Si j'essaye:
Ce qui d'apres moi devrait me donner une collection des Element au niveau inferieur, test1 = null ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 XNamespace xn = "genericNrm.xsd"; XNamespace un = "utranNrm.xsd"; var test1 = xmldoc.Descendants(xn + "MeContext");
1 - Ma premiere question est la suivante: comment extraire un element ayant un attribut donne (et lui seul). Dans mon cas je cherche a extraire le MeContext ayant l'id = RNC0001 et aucun autre. J'ai essaye le code ci-dessous mais ca ne me retourne que des valeurs null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 XNamespace xn = "genericNrm.xsd"; IEnumerable<XElement> utrancells = xmldoc.Root .Elements(xn + "MeContext") .Where(el => (string)el.Attribute("id") == "RNC0001");
2 - Mon second probleme est d'extraire une collection d'elements contenus dans <xn:MeContext id="RNC0001"></xn:MeContext>
Je voudrais avoir tout les <un:UtranCell id="XXXXX"></un:UtranCell> (leur contenu) dans une collection afin de pouvoir extraire des donnees depuis chacune (chaque element UtranCell represente une entite differente). Par exemple je veux extraire la latitude et la longitude:
depuis chaque <un:UtranCell id="XXXXX"></un:UtranCell>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <es:latitude>3070555</es:latitude> <es:longitude>8786666</es:longitude>
Dans cette optique j'ai teste:
et encore une fois cela ne me retourne que des valeurs nulles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 XNamespace un = "utranNrm.xsd"; var test3 = xmldoc.Elements(un + "UtranCell"); var test4 = test1.Elements(un + "UtranCell");
Merci d'avance !
Edit: ajout d'un exemple apres le XML sans .FirstOrDefault()
Partager