[英]How to merge xml files into one file with two specific nodes using C#
xml1: xml1:
<filters>
<folder>
<text>
FOLDER1
</text>
<filter>
<text>
FILTER1
</text>
<value>X</value>
</filter>
<filter>
<text>
FILTER2
</text>
<value>X</value>
</filter>
</folder>
</filters>
xml2: xml2:
<filters>
<folder>
<text>
FOLDER2
</text>
<filter>
<text>
FILTER3
</text>
<value>X</value>
</filter>
<filter>
<text>
FILTER4
</text>
<value>X</value>
</filter>
</folder>
</filters>
xml3: xml3:
<filters>
<folder>
<text>
FOLDER1
</text>
<filter>
<text>
FILTER5
</text>
<value>X</value>
</filter>
<filter>
<text>
FILTER6
</text>
<value>X</value>
</filter>
</folder>
</filters>
and I want merge like this:我想像这样合并:
<filters>
<folder>
<text>
FOLDER1
</text>
<filter>
<text>
FILTER1
</text>
<value>X</value>
</filter>
<filter>
<text>
FILTER2
</text>
<value>X</value>
</filter>
<filter>
<text>
FILTER5
</text>
<value>X</value>
</filter>
<filter>
<text>
FILTER6
</text>
<value>X</value>
</filter>
</folder>
<folder>
<text>
FOLDER2
</text>
<filter>
<text>
FILTER3
</text>
<value>X</value>
</filter>
<filter>
<text>
FILTER4
</text>
<value>X</value>
</filter>
</folder>
</filters>
I want to use 2 specific xml nodes.我想使用 2 个特定的 xml 节点。 I must add new "folder" sometimes but if I have same "folder" (according to folder text data), I want to add into this "folder".
有时我必须添加新的“文件夹”,但如果我有相同的“文件夹”(根据文件夹文本数据),我想添加到这个“文件夹”中。 Like xml3.
像 xml3。 Is it possible?
是否可以? How can I make it?
我怎样才能做到? Does it have a way?
它有办法吗? I merged these xml files like but like a has a new "folder".
我合并了这些 xml 文件,但就像有一个新的“文件夹”一样。 I can't merge as I wanted.
我无法按我的意愿合并。
Try following xml linq尝试遵循 xml linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
const string FOLDER = @"c:\temp\test\";
static void Main(string[] args)
{
//merged elements
XElement newFilters = new XElement("filters");
foreach (string filename in Directory.GetFiles(FOLDER, "*.xml"))
{
XDocument doc = XDocument.Load(filename);
XElement filters = doc.Descendants("filters").FirstOrDefault();
string folderName = ((string)filters.Element("folder").Element("text")).Trim();
XElement newFolder = newFilters.Elements("folder").Where(x => ((string)x.Element("text")).Trim() == folderName).FirstOrDefault();
if (newFolder == null)
{
newFilters.Add(filters.Elements());
}
else
{
List<XElement> xFilters = filters.Descendants("filter").ToList();
newFolder.Add(xFilters);
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.