我正在尝试构造一个Linq查询,它将提取具有特定元素的所有节点。
在下面的例子中,您会注意到第二个条目有一些额外的元素:displayonsignup、sortorder等。
我希望Linq给我所有具有sortOrder元素的入口节点。
XML文档如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<feed >
<entry>
<link href="/ws/customers/testacct/lists/removed" rel="edit"></link>
<id>http://api.constantcontact.com/ws/customers/testacct/lists/removed</id>
<title type="text">Removed</title>
<updated>2010-11-10T19:03:09.253Z</updated>
<author>
<name>Test</name>
</author>
<content type="application/vnd.ctct+xml">
<ContactList id="http://api.constantcontact.com/ws/customers/testacct/lists/removed">
<Name>Removed</Name>
<ShortName>Removed</ShortName>
</ContactList>
</content>
</entry>
<entry>
<link href="/ws/customers/testacct/lists/1" rel="edit"></link>
<id>http://api.constantcontact.com/ws/customers/testacct/lists/1</id>
<title type="text">General Interest</title>
<updated>2010-11-10T19:03:09.253Z</updated>
<author>
<name>Constant Contact</name>
</author>
<content type="application/vnd.ctct+xml">
<ContactList id="http://api.constantcontact.com/ws/customers/testacct/lists/1">
<OptInDefault>true</OptInDefault>
<Name>General Interest</Name>
<ShortName>General Interest</ShortName>
<DisplayOnSignup>Yes</DisplayOnSignup>
<SortOrder>0</SortOrder>
<Members id="http://api.constantcontact.com/ws/customers/testacct/lists/1/members"></Members>
<ContactCount>3</ContactCount>
</ContactList>
</content>
</entry>
</feed>
到目前为止,我的查询如下:
XDocument loaded = XDocument.Parse(response);
result = (from entry in loaded.Descendants("entry")
select new CcList {
LinkHref = entry.Element("link").Attribute("href").Value,
Id = entry.Element("id").Value,
Title = entry.Element("title").Value,
Updated = entry.Element("updated").Value,
ListName = entry.Element("content").Element("ContactList").Element("Name").Value,
OptInDefault = entry.Element("content").Element("ContactList").Element("OptInDefault").Value,
ShortName = entry.Element("content").Element("ContactList").Element("ShortName").Value,
SortOrder = entry.Element("content").Element("ContactList").Element("SortOrder").Value
}).ToList<CcList>();
我应该把什么作为where子句,还是有更好的方法?