在可移植类库中找不到使用linq查询的xml元素



在控制台项目中,我创建了一个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>

您正在寻找一个名为title元素,但它实际上是一个属性。同样的代码在桌面上也会失败。您想要:

title = (string)el.Attribute("title")

这里还不清楚你为什么需要匿名类型——你可以使用:

var titles = doc.Descendants("outline")
                .Select(x => (string) x.Attribute("title"));

(你可以用查询表达式来做这件事,但就我个人而言,我不会这样做——查询表达式非常适合复杂的查询,但当你只是过滤或投影时,它们会添加比保存更多的错误。)

最新更新