2010-06-29 359 views
0

我有以下幾點:過濾你的LINQ to XML查詢

XDocument xdoc = XDocument.Load("C:\\myfile.xml"); 

List<Tag> list = new List<Tag>(); 

foreach (var tag in xdoc.Descendants("META")) 

{ 

string name = tag.Attribute("name").Value; 

string value = tag.Element("value").Value; 

list.Add(new Tag { Name = name, Value = value, Score = score, Key = key }); 

} 

,但我只需要獲得條元件下的META元素。

我可以以某種方式將它添加到linq查詢嗎?

的XML看起來與此類似:

<DOCUMENT> 
    <META name="aaa"/> 
    <ARTICLE> 
    <META name="bbb" value="708" score="0.58" key="6008"/> 
    </ARTICLE> 
</DOCUMENT> 

感謝您的任何建議

最後,我需要做類似如下:

XDocument xdoc = XDocument.Load(tr); 
var meta = from el in xdoc.Descendants("ARTICLE").Elements("META") 
where (string) el.Attribute("name") == "RAW" 
select el; 

List<Tag> list = new List<Tag>(); 
foreach (var tag in meta) 
{ 
string name = tag.Attribute("name").Value; 
string value = tag.Attribute("value").Value; 
string score = tag.Attribute("score").Value; 
string key = tag.Attribute("key").Value; 

list.Add(new Tag { Name = name, Value = value, Score = score, Key = key }); 
}  

這樣做的原因是我需要匹配名稱等於RAW的屬性。

如果有更好的方法來做到這一點,請糾正我!

回答

2

任何地方發現了他們在文件中,使用xdoc.Descendants("ARTICLE")找到所有ARTICLE元素,然後Elements("META")從那裏找到所有直接META子元素。

此外,您可以進行投影,並在相同的查詢轉換到一個列表:

var list = xdoc.Descendants("ARTICLE") 
       .Elements("META") 
       .Select(x => new Tag { Name = (string) x.Attribute("name"), 
             Value = (string) x.Attribute("value"), 
             Key = key }) 
       .ToList();