xml A
<a> <item> <name>张三</name> <code>1</code> </item> <item> <name>李四</name> <code>2</code> </item> <item> <name>王五</name> <code>3</code> </item> <item> <name>赵四</name> <code>4</code> </item> <item> <name>王二麻子</name> <code>5</code> </item> </a>
生成xml B
<b> <items> <item> <name1>张三</name1> <code1>1</code1> <name2>李四</name2> <code2>2</code2> </item> <item> <name1>王五</name1> <code1>3</code1> <name2>王二麻子</name2> <code2>4</code2> </item> </items> </b>
XML A中的两个item 一组加到xml b中一个item下。求解。
会解析xml么,可以解析后,二个item一组生成到b.xml中。
1.新建一个类包含字段 name 和 code
2.使用linq to xml技术实现a.xml文件的读取将读取的存储在数组或者列表或者你喜欢的方式,然后根据需要选择合适的写入b.xml
其实就是写入B.xml有问题。因为都是需要创建生成结构的。所以循环没有想明白。
用System.Xml.XmlDocument解析然后再组合就好了
主要考察点:xml序列化和xml反序列化
string xml = @"<a>
<item>
<name>张三</name>
<code>1</code>
</item>
<item>
<name>李四</name>
<code>2</code>
</item>
<item>
<name>王五</name>
<code>3</code>
</item>
<item>
<name>赵四</name>
<code>4</code>
</item>
<item>
<name>王二麻子</name>
<code>5</code>
</item>
</a>";
XElement root = XElement.Parse(xml);
var eles = root.Elements("item");
XElement cEle = new XElement("items");
XElement newRoot = new XElement("b", cEle);
for (var i = 0; ; i += 4)
{
var tmp = eles.Skip(i).Take(4).SelectMany(x => x.Elements());
var idx = 0;
foreach (XElement e in tmp)
{
var num = idx / 2 + 1;
e.Name = string.Format("{0}{1}", e.Name, num);
idx++;
}
//不用上面一段,用这段会很神奇,第一个name会变成11结尾
//tmp = tmp.Select((y, idx) =>
//{
// var num = idx / 2 + 1;
// y.Name = string.Format("{0}{1}", y.Name, num);
// return y;
//});
//Console.WriteLine(tmp.Count());
if (!tmp.Any())
{
break;
}
var tmpEle = new XElement("item", tmp);
cEle.Add(tmpEle);
}
Console.WriteLine(newRoot);
Console.ReadLine();