2010-08-02 7 views
5

Mam plik XML:Nie można odczytać z XML do <> używając LINQ, uzyskać null

<?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> 

Mam też obiekt:

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; } 
} 

A oto kod, który Używam do odczytu danych do pamięci:

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) 
    }; 

Ale nie pozwoliłoby mi tego zrobić. Kiedy wykonywana jest instrukcja LINQ, domyślny konstruktor jest wywoływany w obiekcie TestItem, a następnie otrzymuję wyjątek null, ponieważ item.Element(ns + "Question").Value ma wartość null.

Dlaczego pojawia się błąd? Jak mogę naprawić mój kod?

Dzięki.

Odpowiedz

3

Zmień to:

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

do tego:

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

tj Zdjąć konkatenacji ns z nazwą atrybutu.

+0

Wielkie dzięki, Rob. – Eugene

Powiązane problemy