2010-08-02 14 views
5

que tengo un archivo XML:no puede leer desde XML en un <> utilizando LINQ, obtener valores nulos

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

También tengo un objeto:

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

Y aquí está el código que Yo uso para leer los datos en la memoria:

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

Pero no me dejaba hacer eso. Cuando se ejecuta la instrucción LINQ, se llama al constructor predeterminado en el objeto TestItem, y luego obtengo la excepción nula porque item.Element(ns + "Question").Value es nulo.

¿Por qué me sale el error? ¿Cómo arreglo mi código?

Gracias.

Respuesta

3

cambiar esta situación:

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

A esto:

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

es decir, quitar la concatenación de NS del nombre del atributo.

+0

Muchas gracias, Rob. – Eugene

Cuestiones relacionadas