Principales respuestas
Lista siempre se retorna vacia

Pregunta
-
Hola,
estoy parseando una xml
<ArrayOfIHistoryAuditCount xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/FrekuencyApi.Models"> <IHistoryAuditCount> <Total>43</Total> <historyAuditList> <IAudit> <Pk_id>36</Pk_id> <date>11/1/2016 12:00:00 AM</date> <id>33133</id> <operation>Create</operation> <userName>felipee</userName> </IAudit> </historyAuditList> </IHistoryAuditCount> </ArrayOfIHistoryAuditCount>
Este es el codigo que parsea pero siempre retorna vacia
public static IList<IAudit> Parse(string xml) { try { IList<IAudit> ListHistoryAudit = new List<IAudit>(); // xml = xml.Replace("\"\"", "\"""); xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + xml ; XDocument doc = XDocument.Parse(xml); ListHistoryAudit = (from elem in doc.Descendants("IAudit").Elements() select new IAudit { Pk_id = elem.Element("Pk_id").Value, userName = elem.Element("userName").Value, id = elem.Element("id").Value, operation = elem.Element("operation").Value, date = elem.Element("date").Value }).ToList(); return ListHistoryAudit; } catch (Exception ex) { List<IAudit> listerror = new List<IAudit>(); return listerror; } }
Ayuda
Felipe Hurtado Developer
Respuestas
-
Ya funciona me faltaba un ns aqui dejo el codigo
public static IList<IAudit> Parse(string xml) { try { List<IAudit> ListHistoryAudit = new List<IAudit>(); // xml = xml.Replace("\"\"", "\"""); xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + xml ; XDocument doc = XDocument.Parse(xml); XNamespace ns = "http://schemas.datacontract.org/2004/07/FrekuencyApi.Models"; ListHistoryAudit = (from elem in doc.Descendants(ns+ "IAudit") select new IAudit { Pk_id = (string)elem.Element(ns + "Pk_id"), userName = (string)elem.Element(ns +"userName"), id = (string)elem.Element(ns+ "id").Value, operation = (string)elem.Element(ns+"operation"), date = (string)elem.Element(ns+"date") }).ToList(); return ListHistoryAudit; } catch (Exception ex) { List<IAudit> listerror = new List<IAudit>(); return listerror; }
Gracias
Felipe Hurtado Developer
- Editado Felipe Hurtado miércoles, 2 de noviembre de 2016 18:39
- Marcado como respuesta Felipe Hurtado martes, 5 de febrero de 2019 21:31
Todas las respuestas
-
hola
es un problema de namespace
XNamespace ns = "http://schemas.datacontract.org/2004/07/FrekuencyApi.Models";
XDocument doc = XDocument.Parse(xml);
var ListHistoryAudit = (from elem in doc.Descendants(ns + "IAudit")
select new IAudit()
{
Pk_id = elem.Element(ns + "Pk_id").Value,
userName = elem.Element(ns + "userName").Value,
id = elem.Element(ns + "id").Value,
operation = elem.Element(ns + "operation").Value,
date = elem.Element(ns + "date").Value
}).ToList();Nota: no definas una clase con el prefijo "I" porque esta se usa para las interface
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
-
Ya funciona me faltaba un ns aqui dejo el codigo
public static IList<IAudit> Parse(string xml) { try { List<IAudit> ListHistoryAudit = new List<IAudit>(); // xml = xml.Replace("\"\"", "\"""); xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + xml ; XDocument doc = XDocument.Parse(xml); XNamespace ns = "http://schemas.datacontract.org/2004/07/FrekuencyApi.Models"; ListHistoryAudit = (from elem in doc.Descendants(ns+ "IAudit") select new IAudit { Pk_id = (string)elem.Element(ns + "Pk_id"), userName = (string)elem.Element(ns +"userName"), id = (string)elem.Element(ns+ "id").Value, operation = (string)elem.Element(ns+"operation"), date = (string)elem.Element(ns+"date") }).ToList(); return ListHistoryAudit; } catch (Exception ex) { List<IAudit> listerror = new List<IAudit>(); return listerror; }
Gracias
Felipe Hurtado Developer
- Editado Felipe Hurtado miércoles, 2 de noviembre de 2016 18:39
- Marcado como respuesta Felipe Hurtado martes, 5 de febrero de 2019 21:31