2013-09-06 2 views
1

약 2GB의 대용량 XML 파일을 CSV로 변환해야합니다. 따라서 xmldocument()가 전체 파일을 메모리에로드 할 수 없으므로 메모리 부족 예외가 발생합니다. 나는 XML 판독기를 사용하여 시도했지만 난 당신이 XmlReader를 사용할 때큰 xml을 csv로 #

+0

SSIS 작업과 비슷합니다. – Romoku

+0

xml 예제를 게시 할 수 있습니까? – Dutts

+0

이것이 축적 된 데이터 인 경우 앞으로 더 커질 것입니다. CSV는 오랫동안 도움이되지 않습니다. 데이터베이스로 전환하는 것이 좋습니다. – Corak

답변

1

DTD 처리는 기본적으로 비활성화되어 있습니다 C#에서 내 코드를 가지고있는 XML

의 DTD를하지 않고 내가 그 일을 가야 어떻게 확신입니다. ~ 200mb 크기의 파일을 처리 할 때 기본 StreamWriter와 연결된 XmlReader가 효율적입니다.

2

은 왜 http://vtd-xml.sourceforge.net/

은 VTD-XML을 당신을 위해 매우 간단해야이 http://danbarnett.net/how-to-convert-large-xml-files-to-csv-78.html 또는 사용 VTD-XML을 할 수 없어 간단하게 추가 할 필요가 XML을 구문 분석하는 XmlReader를 클래스를 사용하여

+0

튜토리얼을 찾을 수 없습니다. DLL을 어떻게 사용합니까? 예제가 있습니까? 또는 더 잘 이해하기 위해 따라 할 수있는 자습서 – aceminer

1

마이크로 소프트 개발자 자신의 코드에 다음 두 줄은 DTD 선언에 언급 된 URI를 액세스 XmlReader를 방지하기 : 설정이 XmlReaderSettings 클래스의 인스턴스 인

settings.ProhibitDtd = false; 
settings.XmlResolver = null; 

. ProhibitDtd에 false 값을 할당하면 DTD 참조가 발생할 때 XmlReader가 예외를 throw하지 못하도록 설정하는 반면 true로 설정하면 판독기가 더 이상 구문 분석을 중단하게됩니다. XmlResolver를 null로 설정하면 독자가 외부에서 참조 된 DTD를 무시하게됩니다. 이를 통해 독자는 외부에서 참조 된 DTD에 액세스하지 않고 전체 XML 문서를 구문 분석 할 수 있습니다. 또한 http://xponentsoftware.com/articles/Http_overload.aspx

가, 영업 이익은 DTD 파일을 사용할 수없는 것으로 나타났다 :에서

인용. 이 경우, ProhibitDtd를 false로 설정하면 dtd 파일을 찾을 수 없으면 예외가 발생하므로 충분하지 않습니다. XmlResolver를 null로 설정하면 문제가 해결됩니다.

1

64bit로 실행하고 OutOfMemoryException에 대한 빠른 수정을 원하면 프로젝트 속성 -> 빌드 탭 -> 플랫폼 대상으로 이동하십시오. "모든 CPU"를 "x64"로 변경하십시오.

2GB XML 파일을 X 문서에로드 할 수 있습니다.

관련 문제