dotTrace от JetBrains широко используется.
Patrick Smacchia, удивительный , NDepend превосходен для обеспечения статического анализа.
Другие ответы сделают свою работу, но подсветка синтаксиса и несколько файлов xml , которые вы говорите, у вас есть, заставляют меня думать, что вам что-то нужно быстрее, почему бы не использовать скудный и средний XmlReader
?
private string[] getNames(string fileName)
{
XmlReader xmlReader = XmlReader.Create(fileName);
List<string> names = new List<string>();
while (xmlReader.Read())
{
//keep reading until we see your element
if (xmlReader.Name.Equals("Keyword") && (xmlReader.NodeType == XmlNodeType.Element))
{
// get attribute from the Xml element here
string name = xmlReader.GetAttribute("name");
// --> now **add to collection** - or whatever
names.Add(name);
}
}
return names.ToArray();
}
Еще один хороший вариант - класс XPathNavigator
, который быстрее XmlDoc, и вы можете использовать XPath.
Также Я бы посоветовал использовать этот подход только IFF после того, как вы попробуете простые варианты, которые вас не устроят.
Вы можете использовать XPath для получения всех элементов, затем запрос LINQ для получения значений всех атрибутов имени, которые вы найдете:
XDocument doc = yourDocument;
var nodes = from element in doc.XPathSelectElements("//Keyword")
let att = element.Attribute("name")
where att != null
select att.Value;
string[] names = nodes.ToArray();
Выражение XPath // ключевое слово означает «все элементы в документе под названием «Ключевое слово».
Изменить : Вы только что заметили, что вам нужны только элементы с именем Ключевое слово. Обновлен пример кода.
Как и другие, я бы предложил использовать LINQ to XML, но я не думаю, что здесь есть необходимость использовать XPath. Вот простой способ вернуть все имена ключевых слов в файле:
static IEnumerable<string> GetKeywordNames(string file)
{
return XDocument.Load(file)
.Descendants("Keyword")
.Attributes("name")
.Select(attr => attr.Value);
}
Красиво и декларативно:)
Обратите внимание: если вы собираетесь использовать результат более одного раза, вам следует вызвать ToList ( )
или ToArray ()
, в противном случае он будет перезагружать файл каждый раз. Конечно, вы можете изменить метод так, чтобы он возвращал List
или строку []
, добавив соответствующий вызов в конец цепочки вызовов методов, например
static List<string> GetKeywordNames(string file)
{
return XDocument.Load(file)
.Descendants("Keyword")
.Attributes("name")
.Select(attr => attr.Value)
.ToList();
}
. Также обратите внимание, что это просто дает вам имена - я ожидал, что вам понадобятся другие детали элементов, и в этом случае вы, вероятно, захотите что-то немного другое. Если окажется, что тебе нужно больше,
Вы, вероятно, захотите использовать XPath. // Ключевое слово / @ name
должно дать вам все имена ключевых слов.
Вот хорошее введение: .Net и XML XPath Queries
Вы можете использовать LINQ to XML.
Пример:
var xmlFile = XDocument.Load(someFile);
var query = from item in xmlFile.Descendants("childobject")
where !String.IsNullOrEmpty(item.Attribute("using")
select new
{
AttributeValue = item.Attribute("using").Value
};