2013-12-23 186 views
0

我有一個LINQ表達式,它從xml文件中獲取XML屬性值。從xml中獲取屬性值c#

var xml = XElement.Load(@"C:\\StoreServer1.xml"); 
var query = from e in xml.Descendants("Groups") 
      where int.Parse(e.Element("Store").Value) == 1500 
      select e.Element("Store").Attribute("WeekDayStClose").Value; 

和XML文件是:

enter<?xml version="1.0" encoding="utf-8" ?> 
<Stores> 
    <Groups Range="000"> 
     <Store WeekDayStClose="210" SatStClose="21" SunStClose="22">1500</Store> 
     <Store WeekDayStClose="23" SatStClose="24" SunStClose="25">18</Store> 
     <Store WeekDayStClose="23" SatStClose="24" SunStClose="25">19</Store> 
    </Groups> 
</Stores> 

我只得到了1500第一個元素屬性的結果(值),如果我搜索同樣的事情18不返回任何結果也不例外。任何幫助讚賞.... Plz的幫助!

回答

1

嘗試了這一點: -

var xml = XElement.Load(@"C:\\StoreServer1.xml"); 
var query = xml.Descendants("Groups").Descendants("Store").Where(e => int.Parse(e.Value) == 18).Select(e=> e.Attribute("WeekDayStClose").Value); 
+0

這幫助。非常感謝。我犯的錯誤是什麼......我做了什麼? – prasuangelo

+0

因爲'Element'獲得第一個(按文檔順序)具有指定XName的子元素,所以你使用了'e.Element(「Store」)'而不是'Descendants(「Store」)'。(來源:MSDN) – erdinger

1

你應該更細化,調用子DescendantsStore(的XName):

var xml = XElement.Load(@"C:\\New Folder\\StoreServer1.xml"); 
    var query = from e in xml.Descendants("Groups").Descendants("Store") 
       where int.Parse(e.Value) == 18 
       select e.Attribute("WeekDayStClose").Value; 

因爲現在你只檢索每個Group這是1500第一Store

0

是的,你有你的代碼一點點錯誤: 要拆分的XML轉換成組元素(你只有一組)。然後,你檢查的第一家專賣店元素的值是1500(你不檢查,如果下列存儲單元具有也許值1500)

你需要改變你的代碼如下

 var query = from e in xml.Descendants("Store") 
        where int.Parse(e.Value) == 1500 
        select e.Attribute("WeekDayStClose").Value; 
+0

只有1個'商店' –

+0

我的錯誤,我的意思是寫「商店」 –