所以基本上,我正在阅读两个
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 [],但是我遇到了困难.我也读过字典,但也很难实现它(我之前从未使用过字典).
最佳答案 这是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
}