【发布时间】:2026-02-13 20:30:01
【问题描述】:
我有一个如下所示的 XML 文件:
<root>
<elements>
<element>
<value1>a</value1>
<value2>b</value2>
</element>
<element>
<value1>c</value1>
<value2>d</value2>
</element>
<element>
<value1>e</value1>
<value2>f</value2>
</element>
<element>
<value1>g</value1>
<value2>h</value2>
</element>
</elements>
<return>0</return></root>
我想将它拆分成 x 个文件,如下所示: 例如
<root>
<elements>
<element>
<value1>a</value1>
<value2>b</value2>
</element>
<element>
<value1>c</value1>
<value2>d</value2>
</element>
</elements>
<return>0</return></root>
我使用的代码真的很丑,一点也不通用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace XMLSplit2
{
class Program
{
static void Main(string[] args)
{
string filePath, file, outputFolder;
XDocument xml;
file = @"test.xml";
outputFolder = @"C:\test\out\";
filePath = @"C:\test\in\" + file;
string _Header = @"<root><elements>";
string _Footer = @"</elements><return>0</return></root>";
int _BatchSize = 2;
int i = 0;
int j = 0;
xml = XDocument.Load(filePath);
XElement element = xml.Root.Elements().ElementAt(0);
var xdoc = new XDocument(element);
StringBuilder sb = new StringBuilder();
string newXml = "";
sb.Append(_Header);
XElement last = xdoc.Root.Elements().Last();
foreach (XElement singleElement in xdoc.Root.Elements())
{
i++;
sb.Append(singleElement.ToString());
if (i % _BatchSize == 0 || singleElement.Equals(last))
{
j++;
sb.Append(_Footer);
newXml = sb.ToString();
System.IO.File.WriteAllText(outputFolder + j.ToString() + "_" + file, newXml);
sb.Clear();
sb.Append(_Header);
}
}
}
}
}
我想摆脱变量 _Header 和 _Footer。我该怎么做才能保持边界并用 x 元素节点填充它?还是说没有xslt就不行?
【问题讨论】:
-
因此,您需要从原始 XML 文件中生成一个包含一半
<element>的 XML 文件,其中仅包含值为a、b、c、d的元素,所有不等于e、f、g、h、...的元素?