2017-02-02 2 views
1

Ich habe Probleme, die Abfrage richtig zu bekommen, wenn Sie versuchen, eine XML-Datei mit XDocument zu analysieren.Wie bekomme ich die richtigen Elemente mit XDocument Abfrage

Was ich will:

Gib mir alle Werte von "Name" Elements of Step mit id = "ID_3" So das Ergebnis eine Liste sein sollte „Name des Teils 1, Name des Teil 2 enthält, Bezeichnung des Teils 3, Name des Teils 4

XML-Input-:..

<MyXML> 
    <Step id="id_1" type="type1"> 
    <Name>Some Name</Name> 
    <Location>1</Location> 
    <Quantity>1</Quantity> 
    </Step> 
    <Step id="id_2" type="type1"> 
    <Name>>Some Name</Name> 
    <Location>2</Location> 
    <Quantity>1</Quantity> 
    </Step> 
    <Step id="id_3" type="type2"> 
    <Instruction>This is some text</Instruction> 
    <Component> 
     <Name>Name of part 1</Name> // --> I want this value 
     <Transition_Start>-0.2,0.01,0.0</Transition_Start> 
     <Transition_End>0,0.01,0.0</Transition_End> 
    </Component> 
    <Component> 
     <Name>Name of part 2</Name> // --> and this 
     <Transition_Start>0.2,0.01,0</Transition_Start> 
     <Transition_End>0,0.01,0</Transition_End> 
    </Component> 
    <Component> 
     <Name>Name of part 3</Name> // --> and this 
     <Transition_Start>0.05,0.1004,0.0333</Transition_Start> 
     <Transition_End>-0.0803,0.1004,0.0333</Transition_End> 
    </Component> 
    <Component> 
     <Name>Name of part 4</Name> // --> and this 
     <Transition_Start>-0.0107,0.0383,-0.2328</Transition_Start> 
     <Transition_End>-0.0107,0.0383,-0.2328</Transition_End> 
    </Component> 
    </Step> 
</MyXML> 

ich habe versucht, so etwas wie diese (in Unity3D)

IEnumerable<XElement> e_nameOfObjects = 
       from el in myXMLDoc.Root.Elements ("Step") 
       where (string)el.Attribute ("id") == "id_" + currentStep 
       select el.Elements ("Component"); 

foreach (XElement e in e_nameOfObjects) { 
    Debug.Log (e.Element("Name")); 
} 

Die Fehlermeldung:

Kann nicht implizit Typ System.Collections.Generic.IEnumerable konvertieren> ' zu System.Collections.Generic.IEnumerable'. Eine explizite Umwandlung existiert (möglicherweise fehlt eine Besetzung?)

+0

Bitte beschreiben Sie, auf welche Weise es nicht funktioniert? Erhalten Sie die falschen Daten, eine Ausnahme, etwas anderes? Bitte geben Sie Details in der Frage an. – Richard

+0

"Bitte Details in der Frage" (Code/Fehler in Kommentaren sind zu schwer zu lesen). – Richard

+0

IEnumerable e_nameOfObjects = (von EL in myXMLDoc.Root.Elements ("Schritt") wobei (string) el.Attribute ("id") == "id_" + currentStep select el.Elements ("Komponente")).Auflisten(); – jdweng

Antwort

1

Sie die Komponente alle unter Verwendung der Elements Methode erhalten und wählen Sie dann Name innerhalb dieser Komponenten wie folgt aus: -

var names = myXMLDoc.Descendants("Step") 
      .Where(x => (string)x.Attribute("id") == "id_3") 
      .Elements("Component") 
      .Select(x => (string)x.Element("Name")); 

Hier Namen wird IEnumerable<string> zurückgeben, auf dem Sie leicht durch foreach Schleife iterieren können.

Working Fiddle.

Verwandte Themen