Cette requête semble être valide, mais j'ai 0 résultats.
IEnumerable<XElement> users =
(from el in XMLDoc.Elements("Users")
where (string)el.Attribute("GUID") == userGUID.ToString()
select el);
Mon XML est le suivant:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Users>
<User GUID="68327fe2-d6f0-403b-a7b6-51860fbf0b2f">
<Key ID="F7000012ECEAD101">
...
</Key>
</User>
</Users>
Avez-vous des indices pour éclairer cela?
remplacez Users
dans la 2e ligne par User
. Comme ça:
IEnumerable<XElement> users = (from el in XMLDoc.Root.Elements("User")
where (string)el.Attribute("GUID") == userGUID.ToString()
select el);
Je suppose que XMLDoc est un XDocument, et non l'élément racine lui-même.
Eh bien, les éléments sers n'ont pas d'attributs GUID. Deux options suggérées:
XDocument.Root.Elements("User")
Descendants("User")
pour trouver tous les éléments utilisateur.Je vais rester avec l'ancien pour le moment. Cela nous donne:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (string) el.Attribute("GUID") == userGUID.ToString()
select el);
Maintenant, nous pouvons encore ranger cela. Tout d'abord, passons à Guid
au lieu de string
:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (Guid) el.Attribute("GUID") == userGUID
select el);
Cependant, il n'y a pas beaucoup de raisons d'utiliser une expression de requête ici ... tout ce que vous appliquez est un seul prédicat. Utilisons simplement la méthode Where
directement:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);
La façon dont vous le présentez dépend de vous, bien sûr :) Avec une ligne plus longue, vous pouvez probablement tout aligner sous une première ligne plus longue:
IEnumerable<XElement> users = XMLDoc.Root
. etc
Maintenant, enfin - qu'en est-il si l'élément User n'a pas d'attribut GUID? Actuellement, ce code lèvera une exception. C'est peut-être exactement ce que vous voulez - ou pas. Si ce n'est pas le cas, vous pouvez lui faire ignorer de telles choses en lançant Nullable<Guid>
alias Guid?
au lieu:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid?) el.Attribute("GUID") == userGUID);