Разбор конфигурации IIS xml doc с linq to xml - PullRequest
0 голосов
/ 30 марта 2009

Я пишу небольшое приложение, которое находит все папки, на которые ссылается 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 ]

1 голос
/ 30 марта 2009

Как насчет:

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

Для извлечения всех необходимых вам элементов. Теперь у вас есть IEnumerable с правильными элементами.

1 голос
/ 30 марта 2009

Попробуйте что-то вроде этого:

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]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...