파일의 전체 복사본을 만든 다음 각 파일에서 요소를 삭제하는 것이 좋습니다. 삭제가 발생할 수있는 레벨을 결정해야합니다.
FileB에서 삭제해야하는 요소의 수를 식별하기 위해 FileA에서 삭제 된 요소의 수로부터 상당히 간단해야합니다.
상황에 따라 적절합니까?
나는 다음과 같이 내 생각을 설명했다. 그것은 테스트되지 않았지만 그룹의 의견을 존중합니다. 당신이 원한다면 나를 downvote하지만 나는 건설적인 비판을 선호합니다.
using System.Xml;
using System.Xml.Schema;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
SplitXML(args[0], args[1]);
}
private static void SplitXML(string fileNameA, string fileNameB)
{
int deleteCount;
XmlNodeList childNodes;
XmlReader reader;
XmlTextWriter writer;
XmlDocument doc;
// ------------- Process FileA
reader = XmlReader.Create(fileNameA);
doc = new XmlDocument();
doc.Load(reader);
childNodes = doc.DocumentElement.ChildNodes;
deleteCount = childNodes.Count/2;
for (int i = 0; i < deleteCount; i++)
{
doc.DocumentElement.RemoveChild(childNodes.Item(0));
}
writer = new XmlTextWriter("FileC", null);
doc.Save(writer);
// ------------- Process FileB
reader = XmlReader.Create(fileNameB);
doc = new XmlDocument();
doc.Load(reader);
childNodes = doc.DocumentElement.ChildNodes;
for (int i = deleteCount + 1; i < childNodes.Count; i++)
{
doc.DocumentElement.RemoveChild(childNodes.Item(deleteCount +1));
}
writer = new XmlTextWriter("FileD", null);
doc.Save(writer);
}
}
}
그래, 덕분에 스트림이 좋은 옵션이 될거라고 생각 했어. 내가 문서에서 있었던 부분의 오버 헤드를 가볍게 두드리며, 다른 옵션이 있는지 확인하는 것뿐입니다. – finoutlook
XmlTextWriter가 정상적으로 작동되었습니다. – finoutlook