2009-03-30 10 views
0

J'écris une petite application qui trouve tous les dossiers référencés par IIS. Pour cela, je prends le fichier de configuration IIS et j'analyse le fichier XML en recherchant les éléments appelés IIsWebVirtualDir et recherchons l'attribut Path.Analyse de la configuration IIS xml doc avec linq to xml

Voici mon code

XDocument doc = XDocument.Load(xmlPath); 

       IEnumerable<XElement> elements = doc.Elements(); 

       foreach (XElement element in elements) 
       { 
        elementCount++; 
        foreach (XAttribute attribute in element.Attributes()) 
        { 
         if(attribute.Name == "Path") 
         { 
          pathsFound++; 
          String path = attribute.Value + ","; 
          Console.WriteLine(path); 
          pathsAsStr.Append(path); 
         } 
        } 
       } 

J'ai aussi essayé d'utiliser éléments IEnumerable = doc.Elements() Descendants ("IIsWebVirtualDir").

Le code se compile mais je ne trouve jamais plus d'un élément. Pourquoi est-ce? Qu'est-ce que je fais mal?

Je joins le code XML mais son trop grand

+0

Y a-t-il une raison pour laquelle vous n'utilisez pas les extensions XPath pour LinqToXml? – AnthonyWJones

Répondre

1

Essayez quelque chose comme ceci:

int elementCount = doc.Elements().Count(); 
var elementsWithPathAttribute = doc.Elements().Where(el => el.Attribute("Path") != null); 

/* 
    The non lamba version would be 
    var elementsWithPathAttribute = from el in doc.Elements() 
            where el.Attribute("Path") != null 
            select el; 
/* 

foreach(XElement element in elementsWithPathAttribute) 
{ 
    //do processing here. 
} 

Une autre façon serait de le faire:

using Syste.Xml.XPath; 
using System.Xml.Linq; 

//.... 

var elementsWithPathAttribute = 
    doc.Elements.XPathSelectElements("//*[@Path]") 
+0

merci Micah - j'ai essayé la première méthode et je reçois toujours le même problème. cela pourrait-il signifier que le xml est mal formé? Je l'ai obtenu en utilisant Enregistrer la configuration pour le fichier dans IIS 6.0 pour les sites Web. – mancmanomyst

+0

tirez moi un email avec le xml. Micah sur codingcontext dot com. Je vais y jeter un coup d'oeil. – Micah

1

Que diriez-vous:

var apps = from element in elements 
      where element.Attributes["Path"] != null 
      select element; 

Pour retr Faites tous les éléments dont vous avez besoin. Vous avez maintenant un IEnumerable avec les éléments corrects.