Как считать атрибуты XML в C#?

dotTrace от JetBrains широко используется.

Patrick Smacchia, удивительный , NDepend превосходен для обеспечения статического анализа.

5
задан Ryan Emerle 1 November 2009 в 12:59
поделиться

5 ответов

Другие ответы сделают свою работу, но подсветка синтаксиса и несколько файлов 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 после того, как вы попробуете простые варианты, которые вас не устроят.

4
ответ дан 13 December 2019 в 22:10
поделиться

Вы можете использовать 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 // ключевое слово означает «все элементы в документе под названием «Ключевое слово».

Изменить : Вы только что заметили, что вам нужны только элементы с именем Ключевое слово. Обновлен пример кода.

3
ответ дан 13 December 2019 в 22:10
поделиться

Как и другие, я бы предложил использовать 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();
}

. Также обратите внимание, что это просто дает вам имена - я ожидал, что вам понадобятся другие детали элементов, и в этом случае вы, вероятно, захотите что-то немного другое. Если окажется, что тебе нужно больше,

3
ответ дан 13 December 2019 в 22:10
поделиться

Вы, вероятно, захотите использовать XPath. // Ключевое слово / @ name должно дать вам все имена ключевых слов.

Вот хорошее введение: .Net и XML XPath Queries

0
ответ дан 13 December 2019 в 22:10
поделиться

Вы можете использовать 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
            };
0
ответ дан 13 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: