Ich mag würde Wikimedia .xml.bzip2 analysieren Dumps, ohne die gesamte Datei zu extrahieren oder eine XML-Validierung durchführen:Lesen sehr große .xml.bz2 Dateien
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");
// ...
}
Die BZip2InputStream
Werke - wenn ich einen StreamReader
verwenden Ich kann XML Zeile für Zeile lesen. Aber wenn ich XmlTextReader
verwenden, scheitert es, wenn ich versuche, die Lese auszuführen:
System.Xml.XmlException: ‚Unerwartetes Ende der Datei aufgetreten ist. Die folgenden Elemente sind nicht geschlossen: mediawiki. Linie 58, Position 1. '
Der bzip Strom nicht bei EOF. Ist es möglich, einen XmlTextReader über einem BZip2-Stream zu öffnen? Oder gibt es andere Möglichkeiten, dies zu tun?
Die Dateien sind ZIP-Dateien (GZ) und die GZ enthält einen einzelnen Artikel. Wenn der gz mehrere Dateien enthielt, könnten Sie den Index lesen und eine einzelne Datei extrahieren. Da der gz eine einzige Datei enthält, müssen Sie die gesamte Datei herunterladen und extrahieren, bevor Sie die XML-Daten analysieren können. – jdweng
"Sehr groß" ist bedeutungslos: es kann alles von 1 MB bis 1 TB bedeuten. Wenn Sie uns keine Nummer geben können, erwähnen Sie bitte nicht die Größe. –
@jdweng - dieser Dump ist eine einzelne, sehr große XML-Datei, die alle von Wikipedia enthält - kein Tarball einzelner Dateien. – user655321