在控制台项目中,我创建了一个XDocument并使用linq来获取xml元素。请参阅以下代码。我尝试在便携式类库中使用相同但它不起作用。使用linq to xml,控制台项目和可移植类库之间是否有不同之处?
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(url);
Stream strm = await response.Content.ReadAsStreamAsync();
XDocument doc = XDocument.Load(strm);
var de = from el in doc.Descendants("outline")
select new
{
title = (string)el.Element("title")
};
在下面的xml示例中:
<opml version="2.0">
<head>
<title>Outline of Category 41</title>
<dateCreated>Tue, 26 Nov 2013 10:15:02 +0100</dateCreated>
<docs>http://www.test.com</docs>
</head>
<body>
<outline title="Title1"/>
<outline title="Title2" />
</body>
</opml>
答案 0 :(得分:4)
您正在寻找名为title
的元素 - 但它实际上是属性。同样的代码也会在桌面上失败。你想要:
title = (string)el.Attribute("title")
为什么你需要一个匿名类型并不是很清楚 - 你可以使用:
var titles = doc.Descendants("outline")
.Select(x => (string) x.Attribute("title"));
(您可以使用查询表达式执行此操作,但我个人不会 - 查询表达式非常适合复杂查询,但是当您只是过滤或投影时,它们会增加比保存更多的绒毛。)