使用linq解析IIS配置xml doc到xml

时间:2009-03-30 14:14:18

标签: xml linq linq-to-sql iis

我正在编写一个小应用程序,找到IIS正在引用的所有文件夹。

为此,我使用IIS配置文件并解析xml,查找名为IIsWebVirtualDir的元素,并查找Path属性。

这是我的代码

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

我也尝试过使用 IEnumerable elements = doc.Elements()。后代(“IIsWebVirtualDir”);

代码编译但我找不到多个元素。为什么是这样?我做错了什么?

我会附加xml,但它太大了

2 个答案:

答案 0 :(得分: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]")

答案 1 :(得分:1)

怎么样:

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

检索所需的所有元素。你现在拥有一个带有正确元素的IEnumerable。