如何基于节点将XML文件拆分为多个XML文件

我有一个XML文件如下

   WNL TextBox 500 txt1   WNL TextBox 500 txt2   0 ControlsID   

我想将xml文件拆分为三个。 根据它的节点

档案1:

   WNL TextBox 500 txt1  

文件2:

   WNL TextBox 500 txt2  

档案3:

   0 ControlsID  

节点也是动态的,它们可能会改变。 如何根据节点将此xml文件拆分为多个。 如果有人知道请分享。

试试LinqToXml

 var xDoc = XDocument.Parse(Resource1.XMLFile1); // loading source xml var xmls = xDoc.Root.Elements().ToArray(); // split into elements for(int i = 0;i< xmls.Length;i++) { // write each element into different file using (var file = File.CreateText(string.Format("xml{0}.xml", i + 1))) { file.Write(xmls[i].ToString()); } } 

它将获取根元素内定义的所有元素,并将其内容写入单独的文件中。

使用Linq到Xml它更简单 – 您可以使用XElement.Save方法将任何元素保存到单独的xml文件中:

 XDocument xdoc = XDocument.Load(path_to_xml); int index = 0; foreach (var element in xdoc.Root.Elements()) element.Save(++index + ".xml"); 

或者一行

 XDocument.Load(path_to_xml).Root.Elements() .Select((e, i) => new { Element = e, File = ++i + ".xml" }) .ToList().ForEach(x => x.Element.Save(x.File)); 

您可以使用XmlTextReaderXmlWriter类来完成您的任务。 但是您需要知道开始创建新XML文件的位置。 查看您的示例,您希望拆分根节点中包含的每个节点。

这意味着一旦你开始阅读XML文件, 你需要确保你在根节点内 ,然后你需要跟踪你的XML深度 ,这样你可以在到达下一个节点时关闭该文件。根节点。

请参阅此示例 – 我从file.xml读取XML并打开XML编写器。 当我到达根节点中包含的第一个节点时,我开始编写元素。

我记得变量“treeDepth”中的深度,它表示XML树结构深度。

基于当前读取的节点,我做了一个动作。 当我到达具有树深度1的End元素时 ,这意味着我再次位于根节点中,因此我关闭当前XML文件并打开新文件。

 XmlTextReader reader = new XmlTextReader ("file.xml"); XmlWriter writer = XmlWriter.Create("first_file.xml") writer.WriteStartDocument(); int treeDepth = 0; while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: // // Move to parsing or skip the root node // if (treeDepth > 0) writer.WriteStartElement(reader.Name); treeDepth++; break; case XmlNodeType.Text: // // Write text here // writer.WriteElementString (reader.Value); break; case XmlNodeType.EndElement: // // Close the end element, open new file // if (treeDepth == 1) { writer.WriteEndDocument(); writer = new XmlWriter("file2.xml"); writer.WriteStartDocument(); } treeDepth--; break; } } writer.WriteEndDocument(); 

请注意,此代码并不能完全解决您的问题,而只是解释了完全解决问题所需的逻辑。

有关XML阅读器和编写器的更多帮助,请阅读以下链接:

http://support.microsoft.com/kb/307548

http://www.dotnetperls.com/xmlwriter