J'essaie de charger des données à partir d'une chaîne XML dans une structure de sorte que, une fois chargé, je peux alors dire Data.PropertyName pour lire les valeurs.Est-ce le moyen le plus efficace de charger des valeurs XML dans une structure?
Le code ci-dessous est-il le moyen le plus optimal de charger les données dans la structure?
De toute évidence, l'appel de First() a un impact sur la mémoire, donc si vous avez des éléments avec des sous-éléments appellera First() pour chacun d'entre eux devient un problème?
Merci
string xml = @"<ROOT>
<ID>1</ID>
<NAME>RF1</NAME>
<STAT>10200</STAT>
<TEST>
<ID>1</ID>
<NAME>BIGUN</NAME>
</TEST>
</ROOT>
";
XElement Data = XElement.Parse(xml);
var Element = (from p in Data.Descendants("ROOT")
select new {
ID = (int)p.Element("ID"),
Test = new {
ID = p.Element("TEST").Descendants("ID").First(),
NAME = p.Element("TEST").Descendants("NAME").First()
},
Stat = p.Element("STAT") }).First();
//Read Element.ID, Element.Test.Name
Wow, merci. Je n'ai jamais vu cette approche auparavant. Diriez-vous que c'est plus efficace que LINQ ou très similaire? Que faire si vous avez une propriété dans la classe qui se rapporte à un XMLElement qui n'apparaît pas dans le fichier XML, lance-t-il une exception ou définit simplement la valeur de la propriété à null? – Jon
@Jon: Je m'attends à ce qu'il soit légèrement moins efficace que LINQ, car il doit utiliser la réflexion pour savoir ce qu'il faut lire dans le XML. Vous auriez à profiler le code pour le savoir avec certitude. Vous pouvez utiliser la propriété IsNullable dans l'attribut XmlElement pour spécifier si l'élément est requis dans XML. – Guffa