我正在编写一个小应用程序,找到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,但它太大了
答案 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。