2017-06-08 3 views
0

Abrufen habe ich eine Reihe von XML-Elementen, dieein Geschwister XML-Element

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

XElement y Geschwister sind derzeit Element e zeigt. Ich möchte jetzt Element b betrachten.

Der Code

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

tut eine Sammlung Rückkehr nur mit dem Element b.

Natürlich, jetzt muss ich nur das einzelne Element b zurückgeben. Ich bin nicht immer sicher, dass Element b eine feste Anzahl von Elementen über e sein wird. Ich vermisse hier etwas wirklich Offensichtliches, weil ich nicht in der Lage war, mir viele gute Artikel anzusehen, um das herauszufinden.

Dinge, die ich versucht habe:

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"); 

Wie kann ich wählen und nur das einzelne Element b zurückkehren, mit Element e zu beginnen?

+0

Haben Sie einen Namespace in der XML? –

Antwort

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

Eine Ausnahme vom Typ 'System.InvalidOperationException' ist in System.Core.dll aufgetreten, wurde jedoch nicht im Benutzercode behandelt. Zusätzliche Information: Sequenz enthält keine Elemente. Was mir ein wenig seltsam vorkommt, denn ohne das First() bekomme ich eine Sammlung, die b enthält. Ich kann eine foreach Schleife machen und den Namen und den Wert drucken. –

+0

@ChuckBland - Ich bin sicher, dass Ihre XML einen Namespace enthält. Sie müssen es berücksichtigen. –

+0

@Alexander Petrov - Das ist eine vernünftige Sache zu überprüfen, aber nein, es gibt keine ns verwenden. Die ElementsBeforeSelf funktioniert. Ich bekomme eine Sammlung und kann durchforschen, um jeden Namen auszudrucken. Die Herausforderung scheint zu sein, wie man den einen Artikel aus der Sammlung auswählt. Ich habe versucht var y = e.ElementsBeforeSelf ("qci"). Single (x => (string) x.Name == "b"); aber es gibt null zurück, obwohl ich weiß, dass b in der Sammlung ist. –

0

In VB würde dies

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

Die C# Version sein sollte ähnlich sein.

Verwandte Themen