2016-03-20 65 views
1

我需要從滿足條件的XML文件中獲取屬性列表。示例:請勿使用Linq.xml模板

<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> 

我想獲得值「pril_okved_11」。這是我的代碼:

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

這對我來說是正確的,但它不工作。有什麼想法嗎?

回答

2

你不遠處。嘗試:

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

或者,如果你使用的是C#6:

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

需要驗證您的測試屬性vldType試圖得到它的價值之前就存在。如果它不存在,繼續前進。

此外,您可以用First代替Where,因爲您需要第一個結果。你也可以刪除.Root.Elements,並直接去Descendants

+0

非常感謝!我錯過了對存在的檢查。工作 –

+0

template.Root.Elements()。Descendants()。其中​​(e => e.Attribute(「vldType」)!= null && e.Attribute(「vldType」)。Value ==「4」)。Attributes 「VL​​D」); –

+0

如果這個答案解決了你的問題,我會很高興你點擊旁邊的綠色檢查 – Jonesopolis

相關問題