2016-03-20 9 views
1

Ich brauche Liste der Attribute aus einer XML-Datei, die eine Bedingung erfüllt. Beispiel:Funktioniert nicht Linq.xml Vorlage

<rows>  
    <row code="16" type="M" grv="К"> 
     <cell column="К" dic="s_okved" format="C(8)" inputType="1" vldType="4" 
       vld="pril_okved_11" /> 
    </row> 
    <row code="17" type="M" grv="К"> 
     <cell column="К" dic="s_okved" format="C(8)" inputType="1" vldType="2" 
       vld="pril" /> 
    </row> 
</rows> 

Ich möchte den Wert "pril_okved_11" erhalten. Hier ist mein Code:

var needFilterDic = template.Root.Elements().Descendants() 
         .Where(e => e.Attribute("vldType").Value.Equals("4")) 
         .Attributes("vld"); 

Es fühlt sich richtig an, aber es funktioniert nicht. Irgendwelche Gedanken?

Antwort

2

Sie waren nicht weit entfernt. Versuchen:

XDocument.Parse(xml) 
      .Descendants() 
      .First(e => e.Attribute("vldType") != null && e.Attribute("vldType").Value == "4") 
      .Attribute("vld") 
      .Value; 

Oder wenn Sie C# verwenden 6:

XDocument.Parse(xml) 
      .Descendants() 
      .First(e => e.Attribute("vldType")?.Value == "4") 
      .Attribute("vld") 
      .Value; 

Sie müssen sicherstellen, dass Ihre Test Attribut vldType existiert, bevor Sie versuchen, den Wert zu bekommen. Wenn es nicht existiert, gehen Sie weiter.

Zusätzlich können Sie hier Where durch First ersetzen, wie Sie das erste Ergebnis möchten. Auch Sie können die und .Elements entfernen, und gehen Sie direkt zu Descendants

+0

Vielen Dank! Ich habe die Existenzkontrolle verpasst. Arbeiten –

+0

template.Root.Elements(). Descendants(). Wobei (e => e.Attribute ("vldType")! = Null && e.Attribute ("vldType"). Wert == "4"). Attribute ("vld"); –

+0

Wenn diese Antwort Ihr Problem gelöst hat, würde ich mich freuen, wenn Sie auf das grüne Häkchen daneben klicken – Jonesopolis

Verwandte Themen