linq - 将 XML 文档转换为字符串数组时出现问题

标签 linq c#-4.0 linq-to-xml

当我使用 XDcoument 对象将 XML 转换为字符串数组时,我得到 0 计数结果,如下所示

Stream dataStream = response.GetResponseStream();

XDocument doc = XDocument.Load((dataStream));

var services = from s in doc.Descendants("Location")
               select (string)s.Element("Name");

string[] locationArray = services.ToArray();

文档如下

<Locations xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Location>
    <Name>Anywhere US</Name>
  </Location>
  <Location>
    <Name>South Central US</Name>
  </Location>
  <Location>
    <Name>Anywhere Europe</Name>
  </Location>
  <Location>
    <Name>West Europe</Name>
  </Location>
  <Location>
    <Name>Anywhere Asia</Name>
  </Location>
  <Location>
    <Name>Southeast Asia</Name>
  </Location>
  <Location>
    <Name>East Asia</Name>
  </Location>
  <Location>
    <Name>North Central US</Name>
  </Location>
  <Location>
    <Name>North Europe</Name>
  </Location>
</Locations>

获取位置名称数组的代码应该有什么问题?

最佳答案

这是一个有趣的问题。

由于您的 xmlns 命名空间,元素名称都具有该命名空间。这有效:

 var locations = from s in 
              doc.Descendants("{http://schemas.microsoft.com/windowsazure}Name")
                 select s.Value;

locations 现在包含您的所有位置

为了使其更具可读性,您可以这样做:

  var services = from s in doc.Descendants()
                 where s.Name.LocalName == "Location"
                 select s.Value;

关于linq - 将 XML 文档转换为字符串数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9680622/

相关文章:

c# - 在 LINQ 中,如何对来自 .Include() 的数据执行 .OrderBy()?

c# - Linq & String.ToLower() 奇怪的行为

c#-4.0 - C# Unity InjectionFactory 不工作

c# - XML 文档的松散合并

c# - 根据某些属性确定列表中的两个或多个对象是否相等

c# - LINQ 中的匿名类型

c# - 如何以 .VCF 格式保存联系人

asp.net-mvc - WebApi 是否支持开箱即用的 application/x-www-form-urlencoded

c# - Linq to XML 问题 : Why is my query not working

.net - 小型应用程序的 LINQ to XML 可以替代小型数据库吗?