2015-05-17 63 views
0

XML片段需要幫助的正確編寫XML LINQ查詢

<GameList> 
    <Game> 
    <GameDefinitiongameID>{1b2e4ff7-ddd3-4fe3-9fdf-6b2ee240d18c}</GameDefinitiongameID> 
    <WMID>{01bc5c01-923d-4efb-bba6-49e93b2694ab}</WMID> 
    <VersionNumberversionNumber>1.0.0.0</VersionNumberversionNumber> 
    <Title>JamesBond007:Nightfire</Title> 
    <GameExecutablepath>\easupport\go_ez.exe</GameExecutablepath> 
    <GameExecutablepath>\easupport\jamesbond007nightfire_code.exe</GameExecutablepath> 
    <GameExecutablepath>\easupport\jamesbond007nightfire_ereg.exe</GameExecutablepath> 
    <GameExecutablepath>\easupport\jamesbond007nightfire_ez.exe</GameExecutablepath> 
    <GameExecutablepath>jamesbond007nightfire_uninst.exe</GameExecutablepath> 
    <GameExecutablepath>unwise.exe</GameExecutablepath> 
    <RatingratingID>{CEC5DB5A-B4C9-4809-96C6-39CE715E4790}</RatingratingID> 
    <ratingSystemID>{36798944-B235-48ac-BF21-E25671F597EE}</ratingSystemID> 
    <DescriptordescriptorID>{F110F831-9412-40c9-860A-B489407ED374}</DescriptordescriptorID> 
    <RatingratingID>{18CD34B7-7AA3-42b9-A303-5A729B2FF228}</RatingratingID> 
    <ratingSystemID>{768BD93D-63BE-46A9-8994-0B53C4B5248F}</ratingSystemID> 
    <DescriptordescriptorID>{B54162A2-F67F-46dc-9ED5-F6067520EC94}</DescriptordescriptorID> 
    <DescriptordescriptorID>{BE562A5F-2A80-4c28-9752-74C696E2ABAF}</DescriptordescriptorID> 
    </Game> 

等。

我用下面的查詢該文件

Dim members = From m In GameXml.Element("GameList").Elements("Game") 
     Where m.Element("Title").Value.ToLower.Contains(Name) = True 
       Select m.Descendants 

「名」是包含搜索字符串變量。

現在,我如何從「members」變量中獲取所有信息(如字符串數組或其他可解析格式)。

我是XML和LINQ的新手。

我對C#和VB.Net都行。

回答

2

如果你不知道它有什麼確切的屬性,你可以做到這一點:

dynamic members = from m In GameXml.Element("GameList").Elements("Game") 
     where m.Element("Title").Value.ToLower.Contains(Name) = True 
       select m; 

現在你可以使用:members.ratingSystemID

但如果你知道的屬性你可以創建一個類,如:

public class Game{ 
public string Title{set; get; } 
public string Name {get; set;} 
. 
. 
. 
} 

然後:

List<Game> members = from m In GameXml.Element("GameList").Elements("Game") 
      where m.Element("Title").Value.ToLower.Contains(Name) = True 
        select new {Title = m.Title, Name = m.Name, ...}; 

所以你可以使用它像Members[0].Title

1

假設你想獲得Game節點,你是如此接近:

Dim members = From m In GameXml.Element("GameList").Elements("Game") 
    Where m.Element("Title").Value.ToLower.Contains(Name) = True 
    Select m.Descendants("Game") 

或(C#):

var members = GameXml.Descendants("Game") 
     .Where(g=>g.Element("Title").Value.ToLower().Contains("Whatever"));