我有以下内容:
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的属性。
如果有更好的方法,请纠正我!
答案 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();