IEnumerable<XElement> foreach
Je voudrais sélectionner tous les éléments d'un
var q = from artikel in xmlSource.Descendants("ART")
where artikel.Element("ID").Value.Equals("15")
select artikel.Elements();
//Does not work
foreach (var element in q)
{
Console.WriteLine("Customer name = {0}", element.Name);
}
Comment puis-je sortie de tous les éléments? J'ai quelques problèmes avec les itérateurs.
Je ne sais pas maintenant comment effectuer une itération sur un
IEnumerable
avec foreach et accéder à l'élément.Nom de la propriété.
//*** Renseignements Supplémentaires //
Exemple XML
<ARTICLE>
<ART>
<ID>0020209</ID>
<EXP>36</EXP>
<QTY>1</QTY>
<SMCAT>B</SMCAT>
<DSCRD>Example Description 1</DSCRD>
<ARTCOMP>
<COMPNO>10710</COMPNO>
<ROLE>H</ROLE>
<ARTNO1>320059</ARTNO1>
<ARTNO2>320059</ARTNO2>
</ARTCOMP>
<ARTCOMP>
<COMPNO>10710</COMPNO>
<ROLE>V</ROLE>
<ARTNO1>320059</ARTNO1>
<ARTNO2>320059</ARTNO2>
</ARTCOMP>
<ARTBAR>
<CDTYP>E13</CDTYP>
<BC>7680202580475</BC>
<BCSTAT>A</BCSTAT>
</ARTBAR>
<ARTPRI>
<VDAT>2010-12-01T00:00:00+01:00</VDAT>
<PTYP>PEXF</PTYP>
<PRICE>30</PRICE>
</ARTPRI>
</ART>
<ART>
<ID>0020244</ID>
<EXP>60</EXP>
<QTY>30</QTY>
<DSCRD>FERRO GRADUMET Depottabl 30 Stk</DSCRD>
<ARTCOMP>
<COMPNO>1836</COMPNO>
<ROLE>H</ROLE>
<ARTNO1>685230</ARTNO1>
<ARTNO2>685230</ARTNO2>
</ARTCOMP>
<ARTCOMP>
<COMPNO>1836</COMPNO>
<ROLE>V</ROLE>
<ARTNO1>685230</ARTNO1>
<ARTNO2>685230</ARTNO2>
</ARTCOMP>
<ARTCOMP>
<COMPNO>5360</COMPNO>
<ROLE>L</ROLE>
<ARTNO1>685230</ARTNO1>
<ARTNO2>685230</ARTNO2>
</ARTCOMP>
</ART>
</ARTICLE>
J'ai importer ce Fichier XML dans un normalisées Table MySQL. ARTCOMP /ARTBAR sont des tables supplémentaires dans la base de données MySQL Datebase.
Comme début, j'ai voulu créer tous les champs de type varchar() dans le vide d'une Table MySQL. Un autre problème, et pas à chaque élément artistique a les mêmes éléments enfants. Peut-être il ya une meilleure façon de trouver tous les possibles éléments d'enfant (sorte de schéma).
foreach
, plus il est probable que votre requête ne retourne pas tous les éléments. Essayez de l'examen q
dans le débogueur. Ce que contient-il ?Non, le code n'est pas compilé.
Name
n'est pas une propriété de IEnumerable<XElement>
...
OriginalL'auteur Brainski | 2011-05-26
Vous devez vous connecter pour publier un commentaire.
Votre
select
clause signifie que le type deq
est en faitIEnumerable<IEnumerable<XElement>>
. Je soupçonne que tu veux dire:Ou:
ou encore:
Qui donnera un type pour
q
de justeIEnumerable<XElement>
- il aplatit les résultats, dans le fond. Vous obtiendrez une séquence de tous éléments qui sont directement au-dessous, un élément appelé "ART", qui à son tour a un élément "ID" de la valeur 15.Si ce n'est pas ce que vous cherchez, veuillez nous donner plus d'informations - idéalement un exemple de fichier XML au long de votre sortie.
Il semble peu probable que vous vraiment souhaitez imprimer le nom de l'élément de tous les éléments que... le nom du client doit être stocké comme un valeur quelque part (soit le texte à l'intérieur de l'élément ou de l'attribut), non pas comme le nom de l'élément.
EDIT: Si vous voulez d'utiliser un
IEnumerable<IEnumerable<XElement>>
vous pouvez utiliser:(int) artikel.Element("ID") == 15
- qui est l'un des très belle touche sur la XLinq API: il tente de jeter leValue
propriété pour le type sans avoir à accéder à laValue
de la propriété et de traiter avec une exception si elle n'est pas présente. En outre, vous pouvez convertir àint?
et si l'élément n'est pas là,null
sera retourné, vous permettant de tolérer le manque de noeuds, sans lourdeur vérification.Merci beaucoup pour votre réponse. Comme vous l'avez indiqué dans le post, le type de q est IEnumerable<IEnumerable<XElement>>. Si je inspecter la variable q dans le débogueur, je vois beaucoup de résultats. Mon problème est que je ne sais pas comment parcourir le résultat avec pour chacune d'elles. Mon but est de trouver tous les noms de tous les éléments. Pour chaque nom d'élément, j'ai créer un champ dans une table MySQL. Mon problème est que je ne sais pas comment gérer IEnumerable<IEnumerable<XElement>>, et les réitérer.
Bon, Si vous voulez c'est un
IEnumerable<IEnumerable<XElement>>
, c'est assez facile à traiter. Je vais modifier...Je savais que la réponse serait facile, merci beaucoup!
OriginalL'auteur Jon Skeet