Je suis en train de créer une collection d'objets métier à partir du document XML suivant en utilisant .net 4.0/C#Comment puis-je créer une collection d'objets métier à partir de plusieurs éléments dans un XmlDocument
<WebServices ErrorFound="False" ServerDateTime="30/11/2010 14:58:58">
<Results>
<Users TotalResults="5">
<UserName UserID="2">John</UserName>
<UserName UserID="3">Dave</UserName>
<UserName UserID="4">Jim</UserName>
<UserName UserID="5">Bob</UserName>
</Users>
</Results>
</WebServices>
C'est la La classe I doit créer
public class User
{
public string Name { get; set; }
public int ID { get; set; }
}
Chaque élément enfant Users doit être une nouvelle instance de la classe. Jusqu'ici j'ai cette méthode qui accepte un XmlDocument.
public static IEnumerable<User> GetUser(XmlDocument xmlDoc)
{
XmlReader reader = XmlReader.Create(new StringReader(xmlDoc.OuterXml));
XDocument doc = XDocument.Load(reader);
var user = from u in doc.Descendants("WebServices").DescendantsAndSelf("Users")
select new User()
{
Name = u.Element("UserName").Value,
ID = int.Parse(u.Element("UserName").Attribute("UserID").Value)
};
List<User> userInstance = user.ToList();
IEnumerable<User> users= from u in userInstance
select u;
return users;
}
Cela fonctionne bien pour autant que la production d'une instance de l'objet du premier élément enfant est concerné, mais je ne suis pas certain de la façon de créer plusieurs instances de tous les éléments. Je dois être en mesure de retourner une collection d'objets Utilisateur par exemple Collection<User> users = new Collection<User>()
Je pourrais aboyer complètement le mauvais arbre. Toute aide est très appréciée.
Veuillez ne pas utiliser 'new XmlTextReader()'. Il est obsolète depuis .NET 2.0. Utilisez 'XmlReader.Create()' à la place. –
Merci, méthode mise à jour pour utiliser XmlTextReader(). – Howdy
Performance sage: n'utilisez pas OuterXml, puis un analyseur. Cela écrit le document entier dans un texte, puis l'analyse à nouveau - très cher. Si vous avez vraiment besoin de convertir XmlDocument en XDocument, vous pouvez utiliser par exemple CreateNavigator(). ReadSubtree() pour obtenir un XmlReader sur XmlDocument et l'utiliser pour charger le XDocument. En général, je n'essaierais pas d'utiliser XDocument ou LINQ en XML si l'entrée est XmlDocument, à la place j'utiliserais directement l'API XmlDocument ou XPath pour faire de même et éviter la conversion. –