如何将 XML 属性值添加到包含对象的字典中

Posted

技术标签:

【中文标题】如何将 XML 属性值添加到包含对象的字典中【英文标题】:How to add XML attribute value to a dictionary containg an object 【发布时间】:2019-10-11 09:16:28 【问题描述】:

我有一个字典,其中包含一个作为 TKey 的字符串和一个作为 TValue 的类“组件”。 键是我从数据库中获取的值,而值来自 XML 文件。 在我的第一种方法中,我用数据库中的键填充我的字典,在第二种方法中,我想获取键与 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与key值相同,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】:

尝试以下:

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; 
    

【讨论】:

以上是关于如何将 XML 属性值添加到包含对象的字典中的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据库值添加到包含类作为对象的字典中

js处理一个数组中包含多个对象,根据对象的一个属性查找到这个对象

C#中XmlTextWriter读写xml文件详细介绍

如何在 json 对象中包含表名

强制在来自 NET Web 服务代理类的 SOAP 请求中包含默认值属性属性

如何将 XML 映射到 C# 对象