2017-06-08 2 views
0

je un ensemble d'éléments XML qui sont frères et sœursRécupération d'un élément XML frère

<z>1</z> 
<b>1</b> 
<w>1</w> 
<n>1</n> 
<e>1</e> 
<v>1</v> 

XElement y est en pointant vers l'élément e. Je veux maintenant regarder Element b.

Le code

var y = e.ElementsBeforeSelf("b"); 

ne retourne une collection avec juste l'élément b.

Bien sûr, maintenant je dois retourner seulement l'élément unique b. Je ne suis pas toujours certain que l'élément b sera un nombre fixe d'éléments au-dessus de e. Il me manque quelque chose de vraiment évident ici parce que je n'ai pas été capable de regarder beaucoup de bons articles pour comprendre cela.

choses que j'ai essayé:

var y = e.ElementsBeforeSelf().First().Element("b"); 
var y = e.ElementsBeforeSelf("b").Element("b"); 
var y = e.ElementsBeforeSelf().Single().Element("b"); 
var y = e.ElementsBeforeSelf().Single(x=>x.Name=="b").Element("b"); 

Comment sélectionner et revenir tout seul l'élément b, en commençant par l'élément e?

+0

Avez-vous un espace de nom dans le fichier XML? –

Répondre

2
var y = e.ElementsBeforeSelf("b").First(); 
+0

Une exception de type 'System.InvalidOperationException' s'est produite dans System.Core.dll mais n'a pas été gérée dans le code utilisateur. Informations supplémentaires: La séquence ne contient aucun élément. Ce qui me frappe un peu bizarre, parce que sans le Premier(), j'obtiens une collection qui contient b. Je peux faire une boucle foreach et imprimer le nom et la valeur. –

+0

@ChuckBland - Je suis sûr que votre fichier XML contient un espace de noms. Vous devez le prendre en compte. –

+0

@Alexander Petrov - C'est une chose raisonnable à vérifier mais non, il n'y a pas d'utilisation ns. Le ElementsBeforeSelf fonctionne. Je reçois une collection et je peux foreach à travers elle pour imprimer chaque nom. Le défi semble être de savoir comment sélectionner le produit que je veux dans la collection. J'ai essayé var y = e.ElementsBeforeSelf ("qci"). Simple (x => (chaîne) x.Name == "b"); mais il retourne null, même si je sais que b est dans la collection. –

0

En VB ce serait

'y has element e 
    Dim b As XElement 
    b = y.Parent.<b>.SingleOrDefault 

La version C# devrait être similaire.