Не могу прочитать из xml в <> используя linq, получить нули - PullRequest
5 голосов
/ 02 августа 2010

У меня есть XML-файл:

<?xml version="1.0" encoding="us-ascii"?>
<TestItems xmlns="http://www.blogger.com">
  <TestItem correct="0" incorrect="0">
    <Question>question</Question>
    <Answer>answer</Answer>
    <Tags>test1;test2</Tags>
  </TestItem>
  <TestItem correct="0" incorrect="0">
    <Question>question3</Question>
    <Answer>answer3</Answer>
    <Tags>tagA;tagB;tagC</Tags>
  </TestItem>
</TestItems>

У меня также есть объект:

class TestItem
{
    public string Question { get; set; }
    public string Answer { get; set; }
    public int NumberCorrect { get; set; }
    public int NumberIncorrect { get; set; }
    public string Tags { get; set; }
}

А вот код, который я использую для чтения данных в память:

XDocument ktdb = XDocument.Load("KTdb.xml");

XNamespace ns = ktdb.Root.Name.Namespace;

var testItems = from item in ktdb.Descendants(ns + "TestItem")
    select new TestItem
    {
        Question = item.Element(ns + "Question").Value,
        Answer = (string)item.Element(ns + "Answer").Value,
        Tags = item.Element(ns + "Tags").Value,
        NumberCorrect = Convert.ToInt32(item.Attribute(ns + "correct").Value),
        NumberIncorrect = Convert.ToInt32(item.Attribute(ns + "incorrect").Value)
    };

Но это не позволило бы мне сделать это.Когда выполняется оператор LINQ, конструктор по умолчанию вызывается для объекта TestItem, а затем я получаю исключение NULL, поскольку item.Element(ns + "Question").Value равно NULL.

Почему я получаю ошибку?Как мне исправить мой код?

Спасибо.

1 Ответ

3 голосов
/ 02 августа 2010

Изменить это:

NumberCorrect = Convert.ToInt32(item.Attribute(ns + "correct").Value),
NumberIncorrect = Convert.ToInt32(item.Attribute(ns + "incorrect").Value)

На это:

NumberCorrect = Convert.ToInt32(item.Attribute("correct").Value),
NumberIncorrect = Convert.ToInt32(item.Attribute("incorrect").Value)

т.е. удалить объединение ns из имени атрибута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...