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

Nit*_*esh 3 c# xml split

我有一个XML文件如下

<?xml version="1.0>
<EMR>
  <CustomTextBox>
    <Text>WNL</Text>
    <Type>TextBox</Type>
    <Width>500</Width>
    <id>txt1</id>
  </CustomTextBox>

  <CustomTextBox>
    <Text>WNL</Text>
    <Type>TextBox</Type>
    <Width>500</Width>
    <id>txt2</id>
  </CustomTextBox>

  <AllControlsCount>
    <Width>0</Width>
    <id>ControlsID</id>
  </AllControlsCount>
</EMR>
Run Code Online (Sandbox Code Playgroud)

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

档案1:

<?xml version="1.0>
<CustomTextBox>
  <Text>WNL</Text>
  <Type>TextBox</Type>
  <Width>500</Width>
  <id>txt1</id>
</CustomTextBox>
Run Code Online (Sandbox Code Playgroud)

文件2:

<?xml version="1.0>
<CustomTextBox>
  <Text>WNL</Text>
  <Type>TextBox</Type>
  <Width>500</Width>
  <id>txt2</id>
</CustomTextBox>
Run Code Online (Sandbox Code Playgroud)

档案3:

<?xml version="1.0>
<AllControlsCount>
  <Width>0</Width>
  <id>ControlsID</id>
</AllControlsCount>
Run Code Online (Sandbox Code Playgroud)

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

mip*_*e34 8

试试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());
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Ser*_*kiy 5

使用Linq to 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");
Run Code Online (Sandbox Code Playgroud)

或者一行

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