전체 파일을 추출하거나 XML 유효성 검사를 수행하지 않고 덤프 :읽기 매우 큰 .xml.bz2 파일
var filename = "enwiki-20160820-pages-articles.xml.bz2";
var settings = new XmlReaderSettings()
{
ValidationType = ValidationType.None,
ConformanceLevel = ConformanceLevel.Auto // Fragment ?
};
using (var stream = File.Open(filename, FileMode.Open))
using (var bz2 = new BZip2InputStream(stream))
using (var xml = XmlTextReader.Create(bz2, settings))
{
xml.ReadToFollowing("page");
// ...
}
BZip2InputStream
작품 - 나는 StreamReader
를 사용하는 경우 , 나는 한 줄씩 XML을 읽을 수있다. 그러나 XmlTextReader
을 사용하면 읽기를 수행 할 때 오류가 발생합니다.
System.Xml.XmlException : '예상치 못한 파일 끝이 발생했습니다. 다음 요소는 닫히지 않았습니다 : mediawiki. 라인 58, 위치 1.
bzip 스트림은 EOF에서 이 아니고입니다. BZip2 스트림 위에 XmlTextReader를 열 수 있습니까? 아니면 이것을 할 다른 방법이 있습니까?
파일은 zip 파일 (gz)이며 gz에는 단일 기사가 들어 있습니다. gz에 여러 개의 파일이 포함되어있는 경우 색인을 읽고 단일 파일을 추출 할 수 있습니다. gz에는 하나의 파일이 있기 때문에 XML 데이터를 파싱하기 전에 전체 파일을 다운로드하고 추출해야합니다. – jdweng
"매우 큽니다"는 의미가 없습니다. 1Mb에서 1Tb까지의 모든 것을 의미 할 수 있습니다. 우리에게 전화 번호를 알려줄 수 없다면 크기에 대해 언급하지 마십시오. –
@jdweng -이 덤프는 개별 파일의 타볼 (tarball)이 아닌 모든 위키피디아를 포함하는 매우 큰 단일 XML 파일입니다. – user655321