我正在尝试使用LINQ绑定以下文件的内容,但是语法有问题。
<metadefinition>
<page>
<name>home</name>
<metas>
<meta>
<metaname>
title
</metaname>
<metavalue>
Welcome Home
</metavalue>
</meta>
<meta>
<metaname>
description
</metaname>
<metavalue>
Welcome Home Description
</metavalue>
</meta>
</metas>
</page>
<page>
<name>results</name>
<metas>
<meta>
<metaname>
title
</metaname>
<metavalue>
Welcome to Results
</metavalue>
</meta>
</metas>
</page>
</metadefinition>
我的查询看起来像这样但是你可以看到它缺少对metas标签的检索。我该如何做到这一点?
var pages = from p in xmlDoc.Descendants(XName.Get("page"))
where p.Element("name").Value == pageName
select new MetaPage
{
Name = p.Element("name").Value,
MetaTags = p.Elements("metas").Select(m => new Tag { MetaName = m.Element("metaname").Value.ToString(),
MetaValue = m.Element("metacontent").Value.ToString()
}).ToList()
};
答案 0 :(得分:1)
如果<metadefinition>
是根元素,那么就不需要迭代文档的所有后代,这样效率太低。
var pages = from p in xmlDoc.Root.Elements("page")
where p.Element("name").Value == pageName
select new MetaPage {
Name = p.Element("name").Value,
MetaTags = p.Element("metas").Elements("meta").Select(m=>new Tag{
MetaName = m.Element("metaname").Value.ToString(),
MetaValue = m.Element("metavalue").Value.ToString()
}).ToList()
};