7
votes

Générez XML à l'aide de LINQ vers XML

Supposons que j'ai une classe qui ressemble à celle ci-dessous, Comment créer XML comme ci-dessous en utilisant LINQ vers XML?

<orders>
  <orderid>
     <orderno>1</orderno>
     <itemid>W001</itemid>
     <itemdesc>C# T-Shirst</itemdesc>
     <quantity>2</quantity>
  </orderid> 
  <orderid>
     <orderno>2</orderno>
     <itemid>W002</itemid>
     <itemdesc>XML T-Shirt</itemdesc>
     <quantity>1</quantity>
  </orderid>
</orders>


2 commentaires

Au lieu de Linq à XML ... L'ajustement plus approprié serait un sérialiseur XML ... et assez trivial à faire.


@Vivek je suis tout à fait en désaccord.


3 Réponses :


2
votes

Vous devez respecter la hiérarchie.

sérialiser ce XML, nous aurons quelque chose comme ceci: p>

<Order>
   <OrderNo></OrderNo>
   <ItemId></ItemId>
   ...
<Order>


1 commentaires

Merci riba, je pense que xmldocument est la voie à suivre



5
votes

Vous n'avez pas besoin de LINQ pour générer ce XML, vous pouvez utiliser LINQ pour générer une collection Avant de sérialiser, vous devez ajouter l'attribut Serializable dans votre classe: xxx

regarder ici comment personnaliser votre sérialisation (à l'aide des attributs ): http://msdn.microsoft.com/fr- US / Bibliothèque / 58A18DWA (v = vs.80) .aspx

Créez une méthode comme celle-ci pour sérialiser: xxx

et désériorize : xxx

et utilisez-le: xxx


3 commentaires

Merci de votre réponse, dans mes exigences réelles, il doit ajouter de nombreux attributs statiques en tant que types de données, espace de noms. Puis-je atteindre cela en utilisant LINQ vers XML?


Je pense que oui, Linq to XML est juste pour lire XML à l'aide de relevés LINQ. Pour l'enregistrer, vous pouvez utiliser la sérialisation (dans mon option, facilement à faire) ou XMLDOCUMUMUMUMUMENT et XMLWriter (bien mais convaincant).


Vous pouvez utiliser LINQ vers XML pour créer et enregistrer XML et avoir beaucoup plus simple de code que la totalité des trucs de sérialisation XML.



21
votes

Bien que vous puissiez utiliser XMLSerialization, il existe un certain nombre de cas où l'utilisation de LINQ vers XML est tout aussi facile et ne verrouille pas votre implémentation de classe dans un seul schéma de sérialisation. Voici un peu de code pour gérer votre demande.

var xOrders = new XElement("orders",
    from o in Orders
    select new XElement("orderid", 
        new XElement("orderno", order.OrderNo),
        new XElement("itemid", order.ItemId),
        new XElement("itemdesc", order.ItemDesc),
        new XElement("quantity", order.Qty)));

xOrders.Save(targetPath);


1 commentaires

Cela répond réellement à la question qui a été posée.