Eigene Klasse für Abfrage eines XML-Wertes

Hallo,

bin gerade am hirnen wie ich folgendes Problem angehen bzw lösen kann.

Über verschiedene Beiträge bin ich auf ZipLib von ICSharp gestossen die mich sehr angetan hat.

In meinem Source rufe ich eine XML-Datei ab:
dim XmlStreamFile as system.io.stream = zip.zipfile.read (strFileName)

Danach befindet sich ein ByteStream in der Variablen XmlStreamFile, soweit ok. Nun muss ich das ganze noch umwandeln zu einem ASCII-String, auch das hat funktioniert, diesen String übergeben ich dann per xmldoc.loadxml(xmlstream)

Nun möchte ich das ganze in eine Klasse verbauen, so dass ich die Klasse mit dem XmlStreamFile als ByteStream und dem gesuchten Pfad zum Element wie ("/docu/test/reihe").

Als Ergebnis möchte ich ein ArrayList() um so alle mit diesem Pfad gefundenen Wert zu erhalten.

Soweit die Theorie.

Ich würde gerne wissen wie man eine Klasse in der Form aufbauen kann die mir dann dieses ArrayList zurück gibt.

Wäre toll wenn mir jemand helfen könnte.

Viele Grüsse,
Daniel
 
Also du solltest mal keinen ASCII-String verwenden, sondern eher UTF-8.

Des weiteren brauchst du dir nur eine Klasse erstellen mit einer Methode, die zum einen den Stream übernimmt und zum anderen deinen gewünschten XPath. Danach kannst du das ganze in ein XmlDocument laden, ein SelectNodes mit dem entsprechenden XPath aufrufen. Due erhaltenen Nodes liest du aus, schreibst die Werte in eine ArrayList und gibst diese zurück.
 
Hallo Norbert,

Danke für die Info, konnte ich wie Deine anderen Beiträge schon gut in die Tat umsetzen.

Ein Problem habe ich:

Ich lese aus einer Textdatei aus einem Zip-File die Datei aus. Der Typ ist system.io.stream.

Wie kann ich feststellen wieviel ich lesen muss wenn stream.length immer 0 ausgibt? Wenn ich spasseshalber mal als Wert 2048 angebe, bekomme ich auch 2k an Daten, nur ich möchte ja bis zum Ende des Stream lesen und dann den gelesenen Dateiinhalt umwandlen in UTF8.

Habe mich an Dein früheres Beispiel gehalten und lesen den Stream aus zipfile.getinputstream und dann

while _streamsize = _stream.read(_buffer, 0, _buffer.length) > 0
_strBuilder.append(new system.text.utf8encoding().getstring(_buffer,0,_streamsize)
end while

aber ich bekomme nicht die ganze Textdatei gelesen ohne zu wissen/anzugeben wieviel Bytes denn nun gelesen werden sollen.


Gruss,
Daniel
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück