Печать массива из XML - C # - PullRequest
0 голосов
/ 19 июля 2011

Я нахожусь в процессе работы с данными XML, и я пытаюсь сделать следующее:

  • Пользователь выбирает значение имени из раскрывающегося списка

  • для каждого узла с указанным именем значение добавляется в список

  • список, а затем преобразуется в строковый массив

  • ** с печатью массива впроверка, вывод не производится

  • строковый массив, преобразованный в массив int (чтобы разрешить вычисления на массиве)

  • ** Печать не выводит снова

Вот код, который я произвел, я не получаю ошибок, просто нет вывода, поэтому я не могу сказать, заполнены ли массивы.

if (DropDownList1.SelectedItem.Text=="Cabin")
{
    //Load XML document
    XmlDocument xml = new XmlDocument();
    xml.LoadXml(Server.MapPath("~/Upload/" + FileUpload1.FileName));
    // xnList = nodes -> rows with Cabin
    XmlNodeList xnList = xml.SelectNodes("/root/row[@name='Cabin']");

    //create a string list
    List<string> strvalues = new List<string>();
    //populate list with values @ node Cabin
    foreach (XmlNode xn in xnList)
    {
        strvalues.Add(xn["value"].InnerText);
    }

    //convert list to array
    strvalues.ToArray();
    for (int i = 0; i < 2; i++)
    {
        //print array
        Console.WriteLine(strvalues[i]);
    }
    //convert string array to int array for data manipulation
    int[] values = strvalues.Select(x => int.Parse(x)).ToArray();
    for (int i = 0; i < values.Length; i++)
    {
        //print array
        Console.WriteLine(values[i]);
    }
}

Воттакже раздел XML-файла;

 <root>
  <row>
    <var name="Name" value="Garcia" />
    <var name=" Surname" value=" Jose" />
    <var name=" Country" value=" Cuba" />
    <var name=" Job" value="Software Developer" />
    <var name=" Cabin" value="345" />
  </row>
  <row>
    <var name="Name" value="Lenon" />
    <var name=" Surname" value="Tim" />
    <var name=" Country" value="USA" />
    <var name=" Job" value="SoftwareDeveloper" />
    <var name=" Cabin" value="444" />
  </row>
 </root>

Ответы [ 3 ]

2 голосов
/ 19 июля 2011

Ваше выражение XPath неверно, так как элемент <row> не имеет атрибута с именем name (и ему также не хватает пробела в фактическом значении атрибута name).

Вы имели в виду /root/row/var[@name=' Cabin'] или, возможно, /root/row[var/@name=' Cabin'] (если вы хотели элемент <row>; хотя, глядя на ваш код, это не так).

<ч />

Кроме того, строка strvalues.ToArray() ничего не делает, потому что вы никому не присваиваете результат. ToArray не изменяет список, он возвращает новый массив с тем же содержимым, что и список. В этом коде нет никакой реальной причины преобразовывать список в массив.

1 голос
/ 19 июля 2011

Значением атрибута name в примере XML является «Кабина» - обратите внимание на начальный пробел.

Значение атрибута, проверенное по имени в запросе XPath, равно «Кабина» - без начального пробела.

Таким образом, вы никогда не найдете никаких узлов.

Общий ответ на просмотрэто будет установка точки останова сразу после создания списка узлов и проверка содержимого в этой точке.

Кроме того, работать с Linq to XML гораздо приятнее, если он доступен вам.

0 голосов
/ 19 июля 2011

У вас есть консольное окно, связанное с вашим решением? Я думаю, что вы используете пользовательский интерфейс, и нет окна консоли (поэтому Console.WriteLine ничего не будет выводить). Вы можете прикрепить один, но для отладки я могу предложить Debug.WriteLine:

http://www.dotnetperls.com/debug-write

Кроме того, вы должны проверить, заполняются ли ваши массивы в режиме отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...