其他分享
首页 > 其他分享> > 便携式类库中使用linq查询找不到xml元素

便携式类库中使用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"));

(您可以使用查询表达式来执行此操作,但我个人不会这样做-查询表达式非常适合复杂的查询,但是当您仅过滤或投影时,它们会比保存的内容更加模糊.)

标签:visual-studio-2012,portable-class-library,linq-to-xml,linq,c
来源: https://codeday.me/bug/20191030/1965701.html