타사 공급 업체에서 사용할 시스템에서 내 보낸 데이터를 나타내는 상당히 큰 XML 파일이 여러 개 있습니다. 파일이 거대하고 관리하기 어려운 파일이 되었기 때문에 각 XML 파일에 대해 2,500 개의 레코드로 결과를 잘라 내고있었습니다. 그러나 타사 공급 업체가이 XML 파일을 모두 하나의 파일로 결합하라고 요청했습니다. 이 XML 파일 중 78 개가 크기가 700MB가 넘습니다! Crazy, know ... 그래서 C#을 사용하여 공급 업체를 수용하기 위해이 파일을 결합하는 방법은 무엇입니까? 희망 한 번 나는 당신의 XML이 같이 보입니다 것을 여기에서 사지에 나가서 가정거야C#에서 두 개 이상의 XML 파일을 같은 스키마로 병합하는 가장 효율적인 방법은 무엇입니까?
6
A
답변
4
을 LINQ의 :-)를 사용하여 한 번에 모든 파일에서 읽지 않고이 작업을 수행 할 수있는 실제 효율적인 방법이있다 :
<records>
<record>
<dataPoint1/>
<dataPoint2/>
</record>
</records>
그렇다면 파일 스트림을 열고 <records>
부분을 작성한 다음 각 XML 파일을 순차적으로 열고 모든 행 (첫 번째 및 마지막 행 제외)을 디스크에 씁니다. 그렇게하면 메모리에 엄청난 문자열이 생기지 않으며 코드 작성 및 실행이 매우 빨라야합니다.
public void ConsolidateFiles(List<String> files, string outputFile)
{
var output = new StreamWriter(File.Open(outputFile, FileMode.Create));
output.WriteLine("<records>");
foreach (var file in files)
{
var input = new StreamReader(File.Open(file, FileMode.Open));
string line;
while (!input.EndOfStream)
{
line = input.ReadLine();
if (!line.Contains("<records>") &&
!line.Contains("</records>"))
{
output.Write(line);
}
}
}
output.WriteLine("</records>");
}
2
사용
DataSet.ReadXml()
, DataSet.Merge()
및 DataSet.WriteXml()
. 프레임 워크가 당신을 위해 일하게하십시오. 이 같은
뭔가 : 추가 설명 및 실시 예를 들어
public void Merge(List<string> xmlFiles, string outputFileName)
{
DataSet complete = new DataSet();
foreach (string xmlFile in xmlFiles)
{
XmlTextReader reader = new XmlTextReader(xmlFile);
DataSet current = new DataSet();
current.ReadXml(reader);
complete.Merge(current);
}
complete.WriteXml(outputFileName);
}
는 Microsoft에서 this article를보십시오.
+0
이것은 내가 취한 원래 경로입니다. 문제는 프로세스가 RAM을 사용하여 종료되었다는 것입니다. –
관련 문제
- 1. C에서 바이트 배열을 병합하는 가장 효율적인 방법은 무엇입니까?
- 2. Delphi에서 두 개 이상의 pdf 파일을 병합하는 가장 쉬운 방법은 무엇입니까?
- 3. XML 파일을 deserialze하는 가장 효율적인 방법은 무엇입니까
- 4. 두 개 이상의 테이블을 출력으로 SQL JOIN - 가장 효율적인 방법?
- 5. Heroku에있는 동일한 스키마로 두 데이터베이스를 병합하는 방법은 무엇입니까?
- 6. 두 XML 파일의 요소를 병합하는 방법은 무엇입니까?
- 7. 두 개 이상의 파일을 추가하는 항목 템플릿을 만드는 방법은 무엇입니까?
- 8. 기본 ASP에서 두 개의 XML 파일을 병합하는 방법은 무엇입니까?
- 9. 두 개 이상의 이름
- 10. 두 개 이상의 테이블을 다른 테이블에 병합하는 JPA
- 11. 두 개 이상의 1 차원 부스트 :: multi_array s 병합하는 방법?
- 12. 두 개 이상의 양식이있는보기
- 13. 2 개 이상의 XML 파일 결합
- 14. crm 프로젝트에서 두 개의 연락처를 병합하는 가장 좋은 방법은 무엇입니까?
- 15. 봄 mvc : 두 개 이상의 제출 버튼을위한 가장 깨끗한 방법?
- 16. XIB 파일을 비교/병합하는 방법은 무엇입니까?
- 17. 두 개 이상의 목록으로 평가하기
- 18. 두 테이블을 병합하는 방법은 무엇입니까?
- 19. 두 개 이상의 동작이있는 버튼은 무엇입니까?
- 20. 두 개 이상의 테이블을 사용하는 조인
- 21. 두 개 이상의 aspx 파일에서 같은 방법 만들기
- 22. 어떻게 변수가 두 개 이상의
- 23. 두 개 이상의 tinymce 편집기
- 24. 두 개 이상의 자바 입력
- 25. spring4gwt를 두 개 이상의 서비스로 내보내는 방법은 무엇입니까?
- 26. 두 xml 파일을 xslt와 비교하는 방법은 무엇입니까?
- 27. xCode 프로젝트에 두 개 이상의 * .xcodeproj 파일을 포함하는 것이 좋습니다.
- 28. xslt를 사용하여 두 xml 파일을 하나의 xml 파일로 병합하는 방법은 무엇입니까?
- 29. 한 페이지에 두 개 이상의 jQuery AutoSuggest를 사용하는 방법은 무엇입니까?
- 30. 목록보기에서 두 개 이상의 텍스트 뷰 제목을 표시하는 방법은 무엇입니까?
이것은 가장 빠른 방법이지만 조금 '해킹'입니다. –
동의 함, 'hacky'at best : p DataSet.Merge는 훨씬 더 우아 해 보이지만 메모리 효율성이 얼마나되는지 전혀 알지 못합니다. – JustLoren
나는 각 XML 파일에 구운 스키마를 가지고 있기 때문에 좀더 'hacky'가된다. –