Je suis essentiellement neuf sur Linq. J'ai beaucoup regardé ici et je suis assez confus. J'ai vu des exemples qui me permettent d'utiliser des objets de type fort à l'aide de Linq, mais je ne les comprends pas vraiment parce qu'ils sont en C #, ce que je suppose vous permet de faire des choses différentes avec Linq (je pense?).
De toute façon C'est ce que j'essaie de faire: p> edit strong> - je veux juste obtenir une liste de tous les produits du document XML DOC et les mettre dans une liste de génériques. p> p>
4 Réponses :
OK, comment de cela?
Ce lien est pour la construction XML? Je ne cherche pas à construire xml ... je l'ai déjà fait ça. C'est pratiquement statique à ce statique. Je dois le lire et l'analyser dans des objets, puis dans une liste de génériques.
Comment obtenir "l'élément" pour être un "produit" comme le type de liste (du produit)?
Je reçois cette erreur sous "productxml" dans "à partir de l'élément de productXML Select item": l'expression de type system.xml.linq.xdocument n'est pas interrogée. Assurez-vous de ne pas manquer d'importation de référence et / ou d'espace de noms pour le fournisseur LINQ ... mais j'ai importé System.Linq ....
Eh bien, peut-être que vous n'avez pas besoin de la requête LINQ alors. -> Pour chaque produit en tant que produit en productexml ...
Merci ... Essayé: Pour chaque article en tant que produit en productXML, mais reçu l'erreur suivante: expression est de type system.xml.linq.xdocument, qui n'est pas un type de collection ... :(
Voir mon édition. Je pense que vous avez juste besoin d'extraire une collection d'éléments de documents du XDocument et de l'itérale à travers celles-ci.
Marc a raison, VB vous permet de faire beaucoup de belles choses. Je suis un c # gars moi-même, mais je viens de frapper une solution VB pour voir comment le faire pour vous. J'ai posté le code ci-dessous et j'ai expliqué les parties clés. J'ai été très impressionné par les caractéristiques VB pour XML!
Je vois dans votre exemple d'échantillon que vous avez déjà réussi à charger votre XML dans un XDocument. Une fois que vous avez effectué votre xdocument.load, vous pouvez accéder au document XML en utilisant une syntaxe spéciale. P>
pour commencer, nous souhaitons obtenir tous les produits du document; I.e. Tous les éléments ceci dit que vous voulez tous les éléments Une fois que nous avons tiré un produit individuel de la collection, nous voudrons accéder aux valeurs du produit telles que le nom ou le prix du produit. Pour ce faire, nous devons faire ce qui suit: p> Voici un exemple complet avec la sortie attendue pour que vous envisagez: p> La sortie du programme est la suivante: P> Product name is Mountain Bike
Product price is 59.99
Product name is Arsenal Football
Product price is 9.99
Product name is Formula One Cap
Product price is 14.99
Product name is Robin Hood Bow
Product price is 8.99
Oui c'est une syntaxe étrange. Si vous utilisez une période, il ne cherchera que des descendants directs du nœud que vous êtes la plus déérique. Les trois périodes indiquent de vérifier tous les nœuds sous le nœud actuel.
Cela a fonctionné bien, même si je serais toujours intéressé à savoir comment le faire à l'aide d'objets dactylographiés forts plutôt que anonymes
Vous pouvez ajouter IntelliSense à votre XML à l'aide de l'assistant XML vers Schema à VS2008. Il y a une procédure pas à suivre sur la façon de le faire sur MSDN ici ici MSDN.MicRosoft.com/fr -us / vbasic / bb840042.aspx . Cela facilitera beaucoup plus facilement de développer avec, malheureux, il n'est pas fortement typé. C'est une amélioration cependant!
Grand exemple! Votre création de la variable de produitsDoc est redondante. Vous pouvez interroger des produitsXML directement exactement de la même manière. Il sera de type xelement.
Oh, afin que le compilateur ait vue productsxml en tant que xelement, il doit être à l'intérieur du sous-sol principal ou doit être explicitement déclaré "comme xelement".
@Dennis Palmer, merci pour le compliment :-) Oui, j'ai réalisé que la création de la variable de produitsDoc était redondante, mais le gars qui a posé la question n'utilisait pas en ligne XML. J'ai décidé de l'écrire d'une manière qui serait facilement adaptée pour lire à la place d'un fichier; Par conséquent, j'ai démontré comment utiliser system.xml.linq.xdocument.parse pour charger un xdocument. Je voulais faire mon exemple concis, mais inclure XML réel avec cela afin qu'il puisse être un exemple de travail totalement.
Le docteur Jones a posté un excellent exemple!
Pour obtenir une collection d'objets de type nommés par opposition à des objets de type anonyme (les deux sont fortement tapés) Faites ceci: P>
Module Module1 ' some products xml to use for this example ' Dim productsXml As XElement = _ <Xml> <Product> <Name>Mountain Bike</Name> <Price>59.99</Price> </Product> <Product> <Name>Arsenal Football</Name> <Price>9.99</Price> </Product> <Product> <Name>Formula One Cap</Name> <Price>14.99</Price> </Product> <Product> <Name>Robin Hood Bow</Name> <Price>8.99</Price> </Product> </Xml> Class Product Private _name As String Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property Private _price As Double Public Property Price() As Double Get Return _price End Get Set(ByVal value As Double) _price = value End Set End Property End Class Sub Main() ' get an IEnumerable of Product objects ' Dim products = From prod In productsXml...<Product> _ Select New Product With {.Name = prod.<Name>.Value, .Price = prod.<Price>.Value} ' go through each product ' For Each prod In products ' output the value of the <Name> element within product ' Console.WriteLine("Product name is {0}", prod.Name) ' output the value of the <Price> element within product ' Console.WriteLine("Product price is {0}", prod.Price) Next End Sub End Module
Je suis peut-être un peu en retard à la fête ici, mais je ne peux pas croire que personne n'a proposé l'option Vous pouvez ensuite renvoyer un iEnumerable du produit de la fonction partagée: p> ceci n'utilise pas xmlsérializer code>:
linqtoxml code> comme tel, mais il désère le XML à un iNeuble de produit, que vous pouvez utiliser LINQ sur comme d'habitude. p> p>
En fait, les moteurs de Linq sont similaires entre C # et VB; XML est l'un des rares domaines où il y a une différence, et c'est VB qui ajoute des choses, pas c # ;-p
Ok ... donc toute idée de l'aide avec / ce problème?
JSON à la recherche d'une aide XML ... c'est un peu drôle!