| 

.NET C# Java Javascript Exception

7
Hallo,

ich müsste ein XML-Dokument sprunghaft auslesen. Die XML-Dokumente können durchaus Gigabyte-Größen erreichen, weswegen ich die Aufgabe an ein Task bzw. Parent-Task und seine Child-Tasks übergeben möchte. Die Größe macht es auch schwierig das ganze Dokument in den Arbeitsspeicher zu quetschen.

Die Frage ist, wie gehe ich am besten vor, wenn ich ein so großes XML-Dokument nicht nur auslesen möchte, sondern darin auch noch von Bereich zu Bereich, vor und zurück springen müsste? Soweit ich weiß, kann XmlReader nur vorwärts lesen.

Wohin gesprungen wird, hängt davon ab, was ich in dem aktuellen Bereich heraus gelesen habe. In den XML-Dokumenten, die ich auslesen möchte, wird viel mit Referenzen gearbeitet. Ungefähr wie in dem Beispiel unten.

XML-Doc:
<Stammbaum>
<Großeltern>
<Personen>
<Person id="1">
<Name>Erna</Name>
<Alter>65</Alter>
<Kind ref="1.1"/>
<Enkel ref="1.1.1"/>
<Enkel ref="1.1.2"/>
</Person>
</Personen>
</Großeltern>
<Eltern>
<Personen>
<Person id="1.1">
<Name>Tanja</Name>
<Alter>35</Alter>
<Elterteil ref="1"/>
<Kind ref="1.1.1"/>
<Kind ref="1.1.2"/>
</Person>
</Personen>
</Eltern>
<Kinder>
<Personen>
<Person id="1.1.1">
<Name>Tim</Name>
<Alter>7</Alter>
<Elterteil ref="1.1"/>
<GroßElterteil ref="1"/>
</Person>
<Person id="1.1.2">
<Name>Maya</Name>
<Alter>10</Alter>
<Elterteil ref="1.1"/>
<GroßElterteil ref="1"/>
<Oma
</Person>
</Personen>
</Kinder>
</Stammbaum>
News:
01.03.2014
Siggi 229 7
1 Antwort
5
Wenn es um derartige Dateigrößen und Geschwindigkeit geht, musst Du wohl beim XmlReader bleiben. Ich kenne Deine genauen Anforderungen nicht, aber womöglich wäre es eine Idee, das Dokument auf Basis der Referenzen zu indizieren, um bei einer Navigation im Dokument schnell einen Reader auf die richtige Position setzen zu können. Vielleicht in einer Kombination aus herkömmlichen Streams oder eines MemoryMappedFiles.
01.03.2014
ffordermaier 8,4k 3 9
Ich habe gar nicht daran gedacht das man XML-Dokumente auch indizieren kann. Ich werde mich mal in das Thema etwas einlesen. Danke für den Tipp.
Siggi 02.03.2014
Ob es da etwas fertiges gibt, weiß ich nicht. Es ist einfach nur eine Idee, um das Navigieren effizienter zu gestalten. Man darf hierbei auch nicht außer Acht lassen, dass das Aufbauen eines Index auch seine Zeit dauert.
Für Dein Beispiel könnte ich mir vorstellen, dass Du mit einem XmlReader alle Person Knoten einliest und daraus einen (wie auch immer gearteten Positions-)Index aufbaust, um beim Zugriff auf z.B. Person mit id=1.1.1 sofort zu wissen, wo Du den XmlReader platzieren musst, um die Daten auszulesen.
ffordermaier 02.03.2014

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH