Получение значений из xml-файла с помощью C#


Я довольно новичок в xml, и я не знаю, как читать/получать значения из xml-файла ниже:

<?xml version="1.0" encoding="utf-8" ?>
<Jeopardy>
  <category name = 'People in Computing'>
<first points = '100' answer = 'Alan Turing'>Known as the questioner of the human   mind, this man is known for helping tell humans and computers apart.</first>
<second points = '200' answer = 'Grace Hopper'>This female pioneer of the COBOL computer programming language was an Admiral in the US Navy.</second>
<third points = '300' answer = 'Tim Berners-Lee'>Called the father of the world wide web, this man is the director of the W3C.</third>
<fourth points = '400' answer = 'Lawrence Lessig'>An American academic and political activist who founded the Creative Commons, this man lobbies for reduced legal restrictions on copyrights and trademarks in the technology sector.</fourth>
<fifth points = '500' answer = 'Ada Lovelace'>This woman, known as the world's first computer programmer was also a Countess.</fifth>
  </category>
</Jeopardy>

Извините за ужасное форматирование,не могу разобраться.

Во-первых, я попытался загрузить этот файл в XDocument приводит к исключению "небелое пространство не может быть добавлено к содержимому", но это не произошло, если загрузить в XmlDocument.

Мой код для попытки получить значение имени:

        string fileName = @"C:UsersKaradocumentsvisual studio 2010ProjectsFinal ProjectFinal ProjectJeopardy.xml";

        XmlDocument doc = new XmlDocument();

        doc.Load(fileName);

        List<string> categories = new List<string>();

        XmlNodeList nList = doc.SelectNodes("/category/name");

        foreach (XmlNode node in nList)
        {
            categories.Add(node.ToString());
        }

К сожалению, при отладке nList имеет количество нулей, и я не могу понять, почему. Я пробовал смотреть на тонну вопросов уже здесь и учебники в других местах, и я просто расстраиваюсь. Как мне получить значения из имени и других узлов? Кто-нибудь может это объяснить? И, возможно, почему я получаю ошибку небелого пространства с XDocument?

3 2

3 ответа:

doc.SelectNodes("/category/name")

Вы не находите никаких узлов, потому что 1) первый узел-это Jeopardy, а не category и 2) name является атрибутом категории, а не дочерним элементом.

Попробуйте: doc.SelectNodes("/Jeopardy/category/@name")

Вот так:

foreach (XmlNode node in nList) {
  categories.Add(node.Value);
}

Убедитесь, что кодировка файла соответствует кодировке, ожидаемой вашим методом загрузки документа. Обычно UTF8 является предпочтительной кодировкой XML-файлов.

Как было отмечено выше, вы можете использовать:

doc.SelectNodes("/Jeopardy/category/name");

Или

doc.SelectNodes("//category/name");

Или

doc.SelectNodes("//name");

Вам нужно открыть XML-документ

 XmlDocument _document = new XmlDocument();
    byte[] bytes = File.ReadAllBytes(filePath);
   string xml = Encoding.UTF8.GetString(bytes);
    try
    {
    _document.LoadXml(xml);
    }
    catch (XmlException e)
    {
    //exception handling
    }                  

    var doc = (XmlDocument)_document.CloneNode(true);

    XmlNode node = doc.GetElementsByTagName("your child node name");

Как только вы получите свой узел, вы можете сделать с ним необходимые вещи