2010-08-02 5 views
5

Je dispose d'un fichier XML:ne peut pas lire xml dans un <> LINQ, obtenir nulls

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

J'ai aussi un objet:

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

Et le code ici que J'utilise pour lire les données dans la mémoire:

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

Mais il ne me laisserait pas faire cela. Lorsque l'instruction LINQ est exécutée, le constructeur par défaut est appelé sur l'objet TestItem, puis j'obtiens l'exception null car item.Element(ns + "Question").Value est null.

Pourquoi l'erreur se produit-elle? Comment puis-je réparer mon code?

Merci.

Répondre

3

Modifier ceci:

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

à ceci:

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

savoir Retirez la concaténation de ns du nom d'attribut.

+0

Merci beaucoup, Rob. – Eugene

Questions connexes