2009-06-10 13 views
0

我正在編寫一個程序來解析一些第三方XML文件。該結構是一樣的東西......用xlinq有效地「鑽取」到XML樹中?

<CharacterSheet> 
    ... 
    <StatBlock> 
     ... 
     <Stat> 
      ... 
      <alias /> 
      ... 
     </Stat> 
     ... 
    </StatBlock> 
    ... 
</CharacterSheet> 

我使用這個在獲得一些實踐與LINQ,而且我澄清我必須寫一些真難看鏈接查詢來獲得我想要的東西,一個列表統計信息及其所有別名。

var CharSheet = from i in character.Elements() 
     where i.Name == "CharacterSheet" 
     select i; 

var StatBlocks = from sheet in CharSheet 
     from statBlock in sheet.Elements() 
     where statBlock.Name == "StatBlock" 
     select statBlock; 

var stats = from statBlock in StatBlocks 
     from stat in statBlock.Elements() 
     select stat; 

var statAliases = from stat in stats 
      from alias in stat.Elements() 
      where alias.Name == "alias" 
      select new { stat, alias }; 

而且我知道我可以做的是爲使用「轉變爲」一個很長的查詢(這是原來我怎麼過的),但只是使它更加密集和困難的工作。

似乎有一個更簡單的方法來做我想做的事情。

回答

6

你可以使用XPathSelectElements()(這可能是一個更好的主意,說實話),或者你可以使用Elements()擴展方法:

var query = character.Elements("CharacterSheet") 
        .Elements("StatsBlock") 
        .Elements() 
        .Elements("alias") 
        .Select(x => new { stat=x.Parent, alias=x}; 
+0

謝謝!這實際上是我自然的傾向(嘗試.Elements(「名稱」),但在Visual Studio中它是說我唯一可以傳遞的參數是一個XName,所以我甚至沒有嘗試使用一個字符串,我不能弄清楚如何製作一個XName 但是,它完美的工作(或者,至少,編譯器不介意我把字符串放在那裏......我還沒有測試過,但我懷疑它應該沒問題) 謝謝! – Asmor 2009-06-10 16:55:48