Linq xml - clause where [Résolu]

cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 24 sept. 2015 à 09:17 - Dernière réponse : Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention
- 24 sept. 2015 à 20:32
Bonjour le Forum,

Je dispose d'un fichier xml dont l'arborescence est la suivante
 <Environments>
    <Environment name="exploitation" ....
      <Applications>
        <Application name="A-P9999H01" ....
          <Jobs>
            <Job name="P9999H0101" ....
            </Job>
            <Job name="P9999H0102" 
            </Job>
          </Jobs>
        </Application>
        <Application name="A-P9999D02" ....
          <Jobs>
            <Job name="P9999D0202" .... 
            </Job>
          </Jobs>
        </Application>
    </Environment>
    <Environment name="production" ....
      <Applications>
        <Application name="A-P1111M01" ....
        ....
        ....
    </Environment>
  </Environments>


La requête
Using reader As New StreamReader("monfichier.xml")
mydoc = XDocument.Load(reader)
End Using

Dim job = (From items In mydoc.Root.Descendants("Environment").Descendants("Application").Descendants("Job") _
Select items)

MessageBox.Show(CStr(job.Count))
me retourne correctement le nombre total de "job".

Je souhaite filtrer le nombre de job par environment.
La requête
Dim job = (From items In MyDoc.Root.Descendants("Environment").Descendants("Application").Descendants("Job") _
Where CStr(items.Elements("Environment").@name) = "exploitation"
Select items)
me retourne 0

Quelle est mon erreur ???
Merci de vos suggestions.

jean-marc
Afficher la suite 

7 réponses

Répondre au sujet
Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 24 sept. 2015 à 13:07
0
Utile
6
Bonjour, un truc du genre

From items In mydoc.Root.Descendants("Environment").where(Function(env) env.Name = "exploitation"


Je n'ai pas de quoi tester sous la main.
Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention > cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 24 sept. 2015 à 13:50
Si tu veux bien poster tyon xml réduit, j'essayerai ce soir.
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention > Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 24 sept. 2015 à 14:44
Le xml réduit
<?xml version="1.0" encoding="UTF-8"?>
<Domain name="Test jean-marc">
  <Environments>
    <Environment name="exploitation">
      <Applications>
        <Application name="Appli1">
          <Jobs>
            <Job name="appli1_exploitation_Job1">
            </Job>
            <Job name="appli1_exploitation_Job2">
            </Job>
            <Job name="appli1_exploitation_Job3">
            </Job>
            <Job name="appli1_exploitation_Job4">
            </Job>
          </Jobs>
        </Application>
        <Application name="Appli2">
          <Jobs>
            <Job name="appli2_exploitation_Job5">
            </Job>
          </Jobs> 
        </Application>
      </Applications>		
    </Environment>
    <Environment name="production">
      <Applications>
        <Application name="Appli3">
          <Jobs>
            <Job name="appli3_production_Job1">
            </Job>
            <Job name="appli3_production_Job2">
            </Job>
          </Jobs>
        </Application>
        <Application name="Appli4">
          <Jobs>
            <Job name="appli4_production_Job3">
            </Job>
          </Jobs> 
        </Application>
      </Applications>		
    </Environment>	
  </Environments>
</Domain>


Il y 2 environnements (exploitation et production).
L'environnement "exploitation" contient 2 applications et 5 jobs.
L'environnement "production" contient 2 applications et 3 jobs.

        Using reader As New StreamReader(PathRoot & PathExportXML & "export_" & "Test" & ".xml")
            mydoc = XDocument.Load(reader)
        End Using

        Dim job = From items In mydoc.Descendants("Job") _
                  Select items
        MessageBox.Show(CStr(job.Count))
me retourne 8 jobs

Je souhaiterai, dans un premier temps, récupérer le nombre de jobs pour l'environnement "exploitation".
Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 24 sept. 2015 à 17:54
        Dim maListe As IEnumerable = (
            From item In xDoc.Descendants("Environment").Where(Function(j) j.@name = "exploitation").Descendants("Job")
            Select item)


me retourne 5 item, je te laisse en faire des Jobs.

Par contre ce n'est pas la peine de mettre toute l'arborescence dans les Descendant(), va direct à celui que tu veux
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention > Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 24 sept. 2015 à 18:42
Merci Whismeril de ta réponse.
        Dim countjob As Integer = (
            From item In mydoc.Descendants("Environment").Where(Function(j) j.@name = "exploitation").Descendants("Job")
            Select item).Count

        MessageBox.Show("Nombre de job : " & countjob.ToString)
me retourne correctement le nombre de job pour l'environnement "exploitation".

Ton "Dim maListe As IEnumerable" m'a orienté vers le "Dim countjob As Integer" avec le Count.

Bonne fin de journée et bonne soirée.

jean-marc
Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention > cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 24 sept. 2015 à 20:32
De rien
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.