Hello ! Me revoila avec encore plus de problemes XML :-)

J'ai le fichier XML suivant que je dois parser pour en extraire des parametres:

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>
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
    XNamespace xn = "genericNrm.xsd";
    XNamespace un = "utranNrm.xsd";
    var test1 = xmldoc.Descendants(xn + "MeContext").FirstOrDefault();
Ce qui me retourne le premier Element "MeContext" (dans ce cas le MeContext avec id=BLABLA)

Si j'essaye:
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");
Ce qui d'apres moi devrait me donner une collection des Element au niveau inferieur, test1 = null ...

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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    <es:latitude>3070555</es:latitude>
    <es:longitude>8786666</es:longitude>
depuis chaque <un:UtranCell id="XXXXX"></un:UtranCell>

Dans cette optique j'ai teste:

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");
et encore une fois cela ne me retourne que des valeurs nulles.

Merci d'avance !

Edit: ajout d'un exemple apres le XML sans .FirstOrDefault()