Как добавить значение атрибута XML в словарь, связывающий объект - PullRequest
0 голосов
/ 11 октября 2019

У меня есть словарь, содержащий строку как TKey и класс "Component" как TValue. Ключи - это значения, которые я получаю из своей базы данных, а значения - из файла XML. В моем первом методе я заполняю свой словарь ключами из базы данных, а во втором методе я хочу получить Pos, где ключ совпадает со строкой в ​​XML-файле.

это небольшой примермоего XML-файла:

 <Part No="1">
    <Part_001 PartsName="38392000" /><br>
    <part_003 SetNo="12" />
    </Part>
 <Part No="2">
    <Part_001 PartsName="37625800" /><br>
    <part_003 SetNo="13" />
    </Part>
...

и т. д. *

PartsName совпадает со значением ключа, а SetNo - это Pos

класс:

public class Component
    {
        public string ComponentNr { get; set; }
        public string Omschrijving { get; set; }
        public int Aantal { get; set; }
        public int Pos { get; set; }
    }

здесь я получаю значения ключей из базы данных:

Dictionary<string, Component> resultaten = new Dictionary<string, Component>();
Component component = new Component();
if (resultaten.ContainsKey((string)dgReader["artcode"]))
                    {
                        resultaten.Add
                        (
                            (string)dgReader["artcode"],
                            component
                        );
                    }

и я хочу получить значение XML SetNo и добавить его в поле класса Pos:

 Dictionary<string, Component> resultaten = new Dictionary<string, Component>();
var query = (from p in xdoc.Descendants("Part")
                                 where (int)p.Attribute("No") > 0
                                 select new
                                 {
                                     ComponentNr = p.Element("Part_001").Attribute("PartsName").Value,
                                     Pos = Convert.ToInt32(p.Element("Part_003").Attribute("Setno").Value)
                                 });
                    foreach (var item in query)
                    {
                        //code to add to dictionary resultaten
                    }

Получение ключей и значений происходит двумя различными способами

1 Ответ

1 голос
/ 11 октября 2019

Попробуйте следующее:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {

            XDocument doc = XDocument.Load(FILENAME);

            List<Component> components = doc.Descendants("Part").Select(x => new Component()
            {
                ComponentNr = (string)x.Attribute("No"),
                Omschrijving = (string)x.Elements().Where(y => y.Attribute("PartsName") != null).Select(y => (string)y.Attribute("PartsName")).FirstOrDefault(),
                Pos = (int)x.Descendants().Where(y => y.Attribute("SetNo") != null).Select(y => (int)y.Attribute("SetNo")).FirstOrDefault()
            }).ToList();

            Dictionary<string, Component> dict = components
                .GroupBy(x => x.ComponentNr, y => y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());

        }
    }
   public class Component
    {
        public string ComponentNr { get; set; }
        public string Omschrijving { get; set; }
        public int Aantal { get; set; }
        public int Pos { get; set; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...