我想解析維基媒體的.xml.bzip2轉儲無需解壓整個文件或執行任何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。
在EOF處的bzip流是而不是。是否可以在BZip2流的頂部打開一個XmlTextReader?還是有其他方法可以做到這一點?
這些文件是zip文件(gz),gz包含一篇文章。如果gz包含多個文件,那麼您可以讀取索引並提取一個文件。由於gz包含單個文件,因此必須下載整個文件並進行解壓縮,然後才能解析xml數據。 – jdweng
「非常大」是毫無意義的:它可以表示任何從1Mb到1Tb的內容。如果你不能給我們一個號碼,那麼不要提及大小。 –
@jdweng - 這個轉儲是一個包含所有維基百科的單個非常大的XML文件,而不是單個文件的tarball。 – user655321