过滤LINQ to XML查询

时间:2010-06-29 15:38:47

标签: c# xml linq

我有以下内容:

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 });

}

但我只需要在元素ARTICLE下获取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的属性。

如果有更好的方法,请纠正我!

1 个答案:

答案 0 :(得分: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();