示例XML文件是:
<?xml version="1.0" encoding="UTF-8"?>
<game>
<name>bomber</name>
<behaviors-used>
<behavior id="Bullet" version="1">Bullet</behavior>
<behavior id="Fade" version="1">Fade</behavior>
<behavior id="Flash" version="1">Flash</behavior>
<behavior id="Sin" version="1">Sine</behavior>
<behavior id="scrollto" version="1">Scroll To</behavior>
</behaviors-used>
</game>
我有查询:
var data = (from item in loaded.Descendants("game")
select new
{
name = item.Element("name").Value,
behaviorlist = item.Element("behaviors-used").Value
}).Single();
这似乎工作得很好。但是,我现在需要检索<behavior>
中的所有behaviorlist
元素。我好像不能这样做:
var bq = (from c in data.behaviorlist select new { behaviour = c.Element("behaviour")});
(引发无效的语法错误)。
如何检索所有行为,不仅可以访问其文本,还可以访问属性id
和version
?
答案 0 :(得分:1)
您的behaviorlist
现在不是一个列表 - 您希望元素不是组合文本,因此您应该检索{{1}而不是使用父节点的Value
属性。 }名称为“behavior”:
Elements
然后,您可以从结果列表中轻松检索属性:
var data = (from item in loaded.Descendants("game")
select new
{
name = item.Element("name").Value,
behaviorlist = item.Element("behaviors-used").Elements("behavior")
}).Single();
答案 1 :(得分:1)
id
和version
是behavior
节点的属性:
var items =
xDocument.Descendants("behaviors-used")
.Descendants("behavior")
.Select((w, i) =>
new
{
Index = i,
Value = w.Value,
Id = w.Attribute("id").Value,
Version = w.Attribute("version").Value
})
.ToList();
答案 2 :(得分:1)
能够使用您的文档在LinqPad中使用它:
var data = (from item in loaded.DescendantsAndSelf("game")
select new{
name = item.Element("name").Value,
behaviorlist = item.Element("behaviours-used")
}
).Single();
var bq = (from c in data.behaviorlist.Descendants("behaviour")
select new {
behaviour = c.Value,
id = c.Attribute("id").Value,
version = c.Attribute("version").Value
});
并产生了一系列5个匿名对象{behavior,id,version}