解析 XML 内容并加载到数据库 .NET6

问题描述 投票:0回答:1

我正在尝试解析 XML 文件(4 级嵌套),并使用模型生成器将这些值附加到本地数据库,而我正在努力解决这部分问题,因此我非常感谢您的帮助。另外,正如您所见,我对这种语言和框架非常陌生。

<machines>
  <machine>
    <manufacturer>SDBSDBSDKB</manufacturer>
    <name>NKSDBSDKJBDSKBDB</name>
    <description>
      <DEU>JBSDSBDKKJ</DEU>
      <ENU>NDSIDBSSKBKJB</ENU>
    </description>
    <type>DSIBDSDBJKSD</type>
    <number>0-200-84-3151</number>
    <cfg_r>
      <connection>JJSBJSBKDSJDBS</connection>
      <cfg_r_text> JHBSJBDISBKDBSKDBSBDKBSDKLN </cfg_r_text>
      <cfg_r_physical_unit_abbreviation> KBJSBDKSKJBSDSKJB 
      </cfg_r_physical_unit_abbreviation>
      <cfg_r_displaytext> JSDHSDVSDVSDDSKBJDB 
      </cfg_r_displaytext>
    </cfg_r> 
  </machine>
</machines>

这是我正在尝试使用的 XML 文件的类似部分。特别是,我正在尝试为“机器”数据库集(2 级)制作模型构建器。 “描述”对象是本机数据库集属性的一部分;这里我使用外键来映射它。就像说:

[ForeignKey(nameof(MachineDescription.Id))]
public int DescriptionID { get; set; }         

这是

MachineDescription
类的描述:

public class MachineDescription
    {
        public int Id { get; set; }
        public string DEU_desc { get; set; }

        public string ENU_desc { get; set; }

        [ForeignKey(nameof(Machine.Id))]
        public MachineDescription MachineId { get; set; }
    }

最后,这就是我的模型构建器:

modelBuilder.Entity<Models.Machine>().HasData(from machine in placeholder.Elements("machine")
  select new Models.Machine
  {
      Id = idx++,
      Manufacturer = machine.Element("manufacturer").Value,
      Name = machine.Element("name").Value,
      MachinesDecriptions.Append(
          new MachineDescription
          {
            Id = descID++,
            DEU_desc = machine.Element("description").Element("DEU").Value,
            ENU_desc = machine.Element("description").Element("ENU").Value,
            MachineId = descID
          }),



      Type = machine.Element("type").Value,
      Number = machine.Element("number").Value,
  });

我希望能在我的

MachineDescription
类中引用我的
Machine
方面获得一些帮助,并且手动添加它们不是一个选项。

c# .net sql-server database
1个回答
0
投票

就像 @Yitzhak Khabinsky 在评论中提到的那样,最好将 xml 传递到数据库并允许在那里解析它。

这里有一些示例代码可以帮助您入门。

Declare @xml xml;
Set @xml = N'<machines>
  <machine>
    <manufacturer>SDBSDBSDKB</manufacturer>
    <name>NKSDBSDKJBDSKBDB</name>
    <description>
      <DEU>JBSDSBDKKJ</DEU>
      <ENU>NDSIDBSSKBKJB</ENU>
    </description>
    <type>DSIBDSDBJKSD</type>
    <number>0-200-84-3151</number>
    <cfg_r>
      <connection>JJSBJSBKDSJDBS</connection>
      <cfg_r_text> JHBSJBDISBKDBSKDBSBDKBSDKLN </cfg_r_text>
      <cfg_r_physical_unit_abbreviation> KBJSBDKSKJBSDSKJB 
      </cfg_r_physical_unit_abbreviation>
      <cfg_r_displaytext> JSDHSDVSDVSDDSKBJDB 
      </cfg_r_displaytext>
    </cfg_r> 
  </machine>
</machines>'

Select  Node.Data.value('manufacturer[1]', 'varchar(100)') As Manufacturer,
        Node.Data.value('name[1]', 'varchar(100)') As Name,
        Node.Data.value('description[1]/DEU[1]', 'varchar(100)') As Description_DEU,
        Node.Data.value('description[1]/ENU[1]', 'varchar(100)') As Description_ENU,
        Node.Data.value('type[1]', 'varchar(100)') As Type,
        Node.Data.value('number[1]', 'varchar(100)') As Number,
        Node.Data.value('cfg_r[1]/connection[1]', 'varchar(100)') As Cfg_Connection,
        Node.Data.value('cfg_r[1]/cfg_r_text[1]', 'varchar(100)') As Cfg_Text,
        Node.Data.value('cfg_r[1]/cfg_r_physical_unit_abbreviation[1]', 'varchar(100)') As Cfg_Abbreviation,
        Node.Data.value('cfg_r[1]/cfg_r_displaytext[1]', 'varchar(100)') As Cfg_DisplayText
From    @xml.nodes('machines/machine') Node(Data)
© www.soinside.com 2019 - 2024. All rights reserved.