Возьмите значения из документа XML в строковый массив - PullRequest
3 голосов
/ 17 июня 2011

Я пытаюсь взять значения из файла XML и поместить их в строковый массив. Вот код, который я использую для этого:

public static string[] GetStringArray(string path)
{
    var doc = XDocument.Load(path);

    var services = from service in doc.Descendants("Service")
                    select (string)service.Attribute("name");

    return services.ToArray();
}

Но всякий раз, когда я его использую, я получаю исключение NullReferenceException здесь:

foreach (string @string in query)
    WeatherServicesCBO.Items.Add(@string);

этого метода:

public void InitializeDropDown(string XmlFile, string xpath)
{

    //string[] services = { "Google Weather", "Yahoo! Weather", "NOAA", "WeatherBug" };
    string[] services = GetStringArray("SupportedWeatherServices.xml");
    IEnumerable<string> query = from service in services
                                orderby service.Substring(0, 1) ascending
                                select service;

    foreach (string @string in query)
        WeatherServicesCBO.Items.Add(@string);
}

РЕДАКТИРОВАТЬ Вот используемый файл XML

<?xml version="1.0" encoding="utf-8" ?>
<SupportedServices>
  <Service>
    <name>Google Weather</name>
    <active>Yes</active>
  </Service>
  <Service>
    <name>WeatherBug</name>
    <active>No</active>
  </Service>
  <Service>
    <name>Yahoo Weather</name>
    <active>No</active>
  </Service>
  <Service>
    <name>NOAA</name>
    <active>No</active>
  </Service>
</SupportedServices>

Ответы [ 4 ]

4 голосов
/ 17 июня 2011

XML содержит элемент name . Вы пытаетесь прочитать атрибут name . Там нет ни одного, поэтому вы получите null обратно. Сделайте соответствующие изменения.

var services = from service in doc.Descendants("Service")
                select (string)service.Element("name");
3 голосов
/ 17 июня 2011

select (string)service.Attribute("name");

«имя» не является атрибутом сервиса. это дочерний элемент.

2 голосов
/ 17 июня 2011

name - это не атрибут Service, а дочерний элемент. Вы должны изменить свой запрос GetStringArray на:

var services = from service in doc.Descendants("Service")
               select service.Element("name").Value;
1 голос
/ 23 июня 2014

Получить список узлов в массиве:

XmlDocument xDocument;
xDocument.Load(Path);
var xArray = xDocument.SelectNodes("SupportedServices/Service/name");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...