Проблема с преобразованием XML-документа в строковый массив
2 Arun Rana [2012-03-13 11:35:00]
Я получаю результат 0 count, когда я преобразовываю 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();
doc соответствует ниже
<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>
Что должно быть неправильно с кодом для извлечения массива имени местоположения?
linq linq-to-xml c#-4.0
2 ответа
1 Решение gideon [2012-03-13 11:59:00]
Интересная проблема:
Из-за вашего пространства имен 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 Jehof [2012-03-13 11:57:00]
У вас есть определение пространства имен в элементе Locations. Таким образом, имя элемента {http://schemas.microsoft.com/windowsazure} Местоположение, а не местоположение.
Если вы удалите определение пространства имен из элемента Locations, тогда ваш запрос будет выполнен правильно и вернет счет из 9 элементов местоположения