2009-03-30 7 views
0

IISが参照しているすべてのフォルダを見つける小さなアプリケーションを作成しています。linqからxmlへのIIS構成xml docの解析

これを行うには、IIS設定ファイルを取得し、IIsWebVirtualDirという名前の要素を探してxmlを解析し、Path属性を探します。ここで

私も) てIEnumerableの要素=のdoc.Elementsを(使用して試してみましたが、私のコード

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); 
         } 
        } 
       } 

ある子孫( "IIsWebVirtualDir")。

コードはコンパイルされますが、複数の要素が見つかりません。どうしてこれなの?私は間違って何をしていますか?

私は、XMLを添付しますが、その大きすぎる

+0

LinqToXmlのXPath拡張機能を使用していない理由はありますか? – AnthonyWJones

答えて

1

はこのような何か試してみてください:もう一つの方法は、これを行うことであろう

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. 
} 

を:

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

//.... 

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

Micahに感謝 - 最初の方法を試しましたが、私はまだ同じ問題を抱えています。これはXMLがひどく形成されていることを意味するのでしょうか? ウェブサイト用にIIS 6.0でファイルを保存する設定を使用して取得しました。 – mancmanomyst

+0

私はxmlでメールを撃つ。 codingcontextドットコムでmicahをオーバーしてください。私はそれを見てみましょう。 – Micah

1

方法について:

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

To retrあなたが必要とするすべての要素を持っています。 IEnumerableに正しい要素が追加されました。