我应该如何组织两个对象才能将它们加入密钥?

时间:2013-02-20 17:42:43

标签: c# xml

基本上,我正在阅读两篇XML文档。第一个有两个值需要存储:名称和值。第二个有四个值:Name,DefaultValue,Type和Limit。在阅读文档时,我想将每个存储到一些对象中。我需要能够将两个对象组合成一个存储有5个值的对象。 XML文档的长度不同,但第二个文档的长度始终是第一个。

实施例

<XML1>
  <Item1>
    <Name>Cust_No</Name>
    <Value>10001</Value>
  </Item1>
  <Item4>
    ITEM4 NAME AND VALUE
  </Item4>
  <Item7>
    ITEM 7 NAME AND VALUE
  </Item7>
</XML1>

<XML2>
  <Item1>
    <Name>Cust_No</Name>
    <DefaultValue></DefaultValue>
    <Type>varchar</Type>
    <Limit>15</Limit>
  </Item1>
  6 MORE TIMES ITEMS 2-7
</XML2>

我已经在XML中循环了代码。我真的只需要考虑存储数据的最佳方法。最终,我希望能够在Name Key上加入两个对象。我尝试了string[]arrayList[],但我遇到了困难。我也读了Dictionary,但也很难实现(我之前从未使用过Dictionary。)

1 个答案:

答案 0 :(得分:2)

这是Linq to Xml查询,它将连接两个XDocuments并为连接的项目选择匿名对象。每个对象都有五个属性:

var query = 
  from i1 in xdoc1.Root.Elements()
  join i2 in xdoc2.Root.Elements()
      on (string)i1.Element("Name") equals (string)i2.Element("Name") into g
  let j = g.SingleOrDefault() // get joined element from second file, if any
  select new {
      Name = g.Key,
      Value = (int)i1.Element("Value"),
      DefaultValue = (j == null) ? null : (string)j.Element("DefaultValue"),
      Type = (j == null) ? null : (string)j.Element("Type"),
      Limit = (j == null) ? null : (string)j.Element("Limit")
  };

XDocuments创建如下:

var xdoc1 = XDocument.Load(path_to_xml1);
var xdoc2 = XDocument.Load(path_to_xml2);

查询的用法:

foreach(var item in query)
{
   // use string item.Name
   // integer item.Value
   // string item.DefaultValue
   // string item.Type
   // string item.Limit
}