J'ai un XML
XDocument XMLDoc = XDocument.Load("testdata.xml"); XElement accounts = (from xml2 in XMLDoc.Descendants("summary") select xml2).FirstOrDefault();
3 Réponses :
var accountSummaryElems = XMLDoc.Element("summary").Elements("account"); This gives you a collection of the account elements under the summary element. You can then iterate them to get the values.EDITED to use the same pattern you were; I call First() instead of FirstOrDefault() because that code won't run anyway if the "account" element is not found.Then you have the right idea with iterating over the collection returned.
merci Andrew. Je suppose que je suis capable d'utiliser votre solution pour obtenir le résultat. Je modifie mon message d'origine. Apprécier si vous pouvez valider.
J'ai posté la solution .. Pouvez-vous vérifier. apprécier ton aide.
Vous avez la bonne idée; J'ai mis à jour ma réponse pour utiliser élément code> et
elements code> au lieu de
descendants code>, par réponse de robert.
Vous devez utiliser la méthode ou, alternativement, Dans ce cas, vous pouvez également utiliser éléments code>:
xpathselectelements code>, lequel dans ce cas est plus simple: p>
descendants code>, comme Andrew Barber suggéré, mais en général, vous ne devriez en faire que lorsque vous voulez vraiment trouver tous les descendants avec un nom donné, et pas seulement des enfants immédiats. Sinon, votre code fait beaucoup de recherche qu'il n'a pas besoin de, et peut retourner des éléments que vous ne le souhaitez pas. P> p>
Oh ... je n'avais même pas compris qu'il utilisait descendants code> plutôt que
éléments code> !!!
Correction de ma réponse et +1 pour noter que; Descendants Code> fonctionnerait dans ce cas, mais cela pourrait avoir de mauvais résultats s'il y avait d'autres éléments avec les mêmes noms ailleurs.
Ceci renvoie des éléments enfants en tant que liste de chaînes peu importe la situation.
using System.Xml.Linq; XDocument xmlDocument = XDocument.Load(fileName); public List<string> FindChilds(string parentTag) { return xmlDocument.Descendants().Where(x => x.Parent != null).Where(x => x.Parent.Name.ToString().Equals(parentTag)).Select(x => x.Name.ToString()).ToList(); }
Vous devriez vérifier Linqpad, il vous permet de tester ce genre de chose à la volée. c'est soigné. :)
Écrire
à partir de x in ... SELECT X code> est inutile. Écrivez simplement le code après
dans code> directement.
2svick, vous avez raison en fait .. je n'ai pas remarqué cela. J'ai mis à jour le code maintenant :) merci!