Проблема с преобразованием XML-документа в строковый массив - PullRequest
2 голосов
/ 13 марта 2012

Я получаю результат 0 при преобразовании XML в строковый массив, используя объект XDcoument в строковый массив, как указано ниже

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>

Что должно быть не так с кодом для извлечения массива имени местоположения?

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Интересная проблема это была.

Из-за вашего 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;
1 голос
/ 13 марта 2012

У вас есть определение пространства имен в вашем элементе Locations. Таким образом, имя элемента {http://schemas.microsoft.com/windowsazure}Location, а не Location.

Если вы удалите определение пространства имен из элемента Locations, ваш запрос будет выполнен правильно и вернет счетчик из 9 элементов Location

...