Ainsi, la question noobie du jour ...LINQ to XML: attributs de retour des enfants du même nom et les parents du même nom
J'ai un fichier XML avec la structure suivante:
<result>
<rowSet name="name">
<row name="name1" />
<row name="name2" />
<row name="name3" />
</rowSet>
<rowSet name="type">
<row type="type1" />
<row type="type2" />
<row type="type3" />
</rowSet>
etc..
</result>
J'ai essayé, et plutôt sans succès, d'obtenir les attributs de ligne à partir d'un seul rowSet basé sur le nom rowSet: attribute. En d'autres termes, j'essaie de tirer les attributs de la "rangée" qui est seulement contenue sous un rowSet: Attribut d'un nom spécifique.
J'ai essayé d'utiliser:
var rowSet = from rs in xmlDoc.Descendants("result")
where rs.Descendants("rowset").Attributes("name").Any(a => a.Value == "name")
select new
{
row = from r in xmlDoc.Descendants("row")
select new
{
skillID = r.Attribute("name"),
}
};
Cependant, cela ne donne pas plus d'un seul résultat. Été plutôt frustrant, et encore une fois ... après avoir essayé 15 suggestions différentes, j'ai été incapable de me souvenir du code original pour le lecteur.
Une réponse a été donnée:
var rowNames = (from i in xmlDoc.Descendants("rowSet")
where (string)i.Attribute("name") == "name"
select i.Descendants("row")) // Had to move this last) to...
.Select(r => (string)r.Attribute("name")); // Here in order to get it to work
je crois que cela a fonctionné, mais je suis trop noobish pour savoir comment itérer à travers elle, même si je peux accéder aux données via le « Résultat View » de le débogueur lorsque le programme est en cours d'exécution.
Ok, donc je suis en mesure d'obtenir cette requête à courir à droite (en déplaçant un «) » en premier) et quand je commence par le code pas à pas, les rownames a des valeurs en elle. Cependant, je n'ai pas réussi à afficher l'information de quelque façon que ce soit. Je joue avec cela dans une application de console, fyi.
Alors c'est le premier problème.
Le second est, si je commence à faire mon XML un peu plus compliqué, en ajoutant plusieurs attributs aux éléments de la ligne, comme:
<result>
<rowSet name="name">
<row fName="Ted" lName = "Happy" />
<row name="Billy" lName = "Maddison"/>
<row name="John" lName = "Doe"/>
</rowSet>
<rowSet name="type">
<row type="type1" type2 ="Hero"/>
<row type="type2" type2 ="Villain" />
<row type="type3" type2 ="Neutral"/>
</rowSet>
</result>
Comment puis-je récupérer tous les attributs dans un élément?
Cela semble si basique, c'est pourquoi je me sens assez retardé pour le moment.
Pouvez-vous clarifier la sortie désirée? –
Je cherche simplement à retourner les attributs des différentes "rangées". – Josh