C # Проблема с добавлением данных из XML в выпадающий список - PullRequest
0 голосов
/ 27 июня 2019

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

Вот как выглядит XML-файл.

    <menus>
      <addMaterialForm>
        <filamentType>
          <Type>ABS</Type>
          <Type>PETG</Type>
          <Type>PLA</Type>    
        </filamentType>
      </addMaterialForm>
    </menus>

Вот мой код C #:

        private void searchButton_Click(object sender, EventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(Globals.xmlFilePath);

            foreach (XmlNode node in doc.DocumentElement)
                {
                    foreach (XmlNode child in node.ChildNodes)
                    {
                        filamentBox.Items.Add(child.InnerText);
                    }
                }
          }

По какой-то причине весь внутренний текст складывается вместе, и вот результат, который я получаю. результат

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Вы извлекаете все значения типа одновременно из элемента "filamentType", вам нужно перейти еще на один уровень вниз.

Другой подход заключается в использовании XDocument.Descendants для извлечения всех значений определенного элемента.

ComboBox имеет свойство DataSource.Извлечь коллекцию типов из файла XML и установить для этой коллекции свойство DataSource.

var document = XDocument.Load(Globals.xmlFilePath);
var types = document.Descendants("Type").Select(element => element.Value).ToList();

filamentBox.DataSource = types;

Для поклонников с одним вкладышем:)

filamentBox.DataSource = XDocument.Load(Globals.xmlFilePath)
    .Descendants("Type")
    .Select(element => element.Value)
    .ToList();
0 голосов
/ 27 июня 2019

Ну, вы еще не использовали XPath для достижения нужного родителя (filamentType), где существуют необходимые элементы.Следовательно, внутренний текст дает вам все значения узлов.

Используйте xpath вроде:

//menus/addMaterialForm/filamentType 

, чтобы достичь нужного родительского XmlNode.Затем переберите всех детей и добавьте в выпадающий список.

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