valor obtener nombre nodo net leer factura extraer especifico electronica ejemplos datos archivo c# xml xml-parsing linq-to-xml

nombre - C#Obtener valor de nodo XML



obtener valor de un nodo xml c# (3)

Podrías usar esto

string id = "2"; var qa = doc.Descendants("tasks").Elements("task") .Where(x => x.Element("id").Value == id).FirstOrDefault(); if (qa != null) { var question = qa.Element("question").Value; var answer = qa.Element("answer").Value; }

Si necesita obtener las preguntas y respuestas fuera de este alcance, le sugiero que cree una clase que contenga los datos. Por ejemplo,

public class QuestionAnswer { public string ID { get; set; } public string Question { get; set; } public string Answer { get; set; } } var qa = doc.Descendants("tasks").Elements("task") .Where(x => x.Element("id").Value == id) .Select(x => new QuestionAnswer() { ID = "2", Question = x.Element("question").Value, Answer = x.Element("answer").Value });

Puede mejorar lo anterior utilizando un diccionario para almacenar el par de preguntas / respuestas, pero es solo un ejemplo para darle una idea. en caso de que su clase QuestionAnswer sea más complicada que solo esas dos propiedades.

Quiero obtener los valores de question y answer usando C #, pero antes de eso quiero obtener la identificación que necesito. Estoy usando este XML:

<root> <information> <name>Tasks</name> <date>15-05-2005</date> </information> <tasks> <task> <id>1</id> <question>Here comes question 1</question> <answer>Answer 1</answer> </task> <task> <id>2</id> <question>Here comes question 2</question> <answer>Answer 2</answer> </task> <task> <id>3</id> <question>Here comes question 3</question> <answer>Answer 3</answer> </task> </root>

C # code:

XDocument tasks; int TheIdINeed = 2; string quest = ""; string answ = "";

En la carga de formulario:

tasks = XDocument.Load(leveltoload); var status = tasks.Element("level").Element("information"); quest = tasks.Element("root").Element("tasks").Element("task").Element("question").Value; // It returns me the first task data, but I need to load data with required Id (int TheIdINeed = ...)

Lo siento, mi inglés no es bueno.


puede obtener todos los datos en el diccionario para que no repita la conversión a la cadena

var res = tasks.Descendants("task") .Select(x => x.Elements().ToDictionary(e => e.Name.ToString(), e => (string)e.Value)) .FirstOrDefault(x => x["id"] == id); res["question"] res["answer"]

pero si hay tareas sin preguntas o respuestas en su xml, tiene que verificar si res contiene la clave antes de que obtenga valor, o use TryGetValue:

string question; res.TryGetValue("question", out question);


var empty = new XElement("e"); var sID = id.ToString(); var element = tasks.Descendants("task") .FirstOrDefault(x => ((string)x.Element("id")) == sID); string quest = (string)((element ?? empty).Element("question")); string answ = (string)((element ?? empty).Element("answer"));