Laden...

[gelöst] XML aus einem Stream lesen

Erstellt von av1406 vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.970 Views
A
av1406 Themenstarter:in
72 Beiträge seit 2009
vor 12 Jahren
[gelöst] XML aus einem Stream lesen

Hallo zusammen,

ich habe auf der festplatte gespeicherte XML Dokumente die verschlüsselt sind.
diese möchte ich im code laden, entschlüsseln und auslesen. doch das klappt nicht so einfach es sei denn nach dem entschlüsseln, speichere ich das xml dokument auf der festplatte und lese es dann ein. ich möchte natürlich nicht das entschlüsselte dokument auf der festplatte ablegen, sondern in einen stream schreiben und daraus lesen.


XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filename);
            ...
            LocalLicence.Decrypt(xmlDoc, rsaKey, rsaKeyName);

            MemoryStream stream = new MemoryStream();
            xmlDoc.Save(stream);
            XmlTextReader reader = new XmlTextReader(stream);

            while (reader.Read()) { ... } 

bei reader.Read() bekomm ich eine XmlException "Das Stammelement ist nicht vorhanden."

wenn ich das Dokument anstatt in einen Stream, in eine Datei speichere mit xmlDoc.Save("test.xml"); dann klappt das einwandfrei.

wie kann ich mein xml-dokument aus einem stream lesen?

danke im voraus

p.s. ich denke hier war das thema schon mal gefragt aber leider ohne lösung:

Stream via XmlReader lesen

G
538 Beiträge seit 2008
vor 12 Jahren

Eventuell musst du deinen Stream "zurückspulen"

stream.Seek(0, SeekOrigin.Begin);

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

A
av1406 Themenstarter:in
72 Beiträge seit 2009
vor 12 Jahren

danke! das wars...

aber was mach ich da eigentlich mit dem "zurückspulen"?

G
538 Beiträge seit 2008
vor 12 Jahren

Zum Stream gehört eine Position. Das ist ein Zeiger, wo du grade im Stream liest. Wenn du stream.Read ausführst, wird AB dieser Position gelesen.
Mit Seek(0, Begin) kannst du diese Position auf 0 zurücksetzen und somit liest du wieder den ganzen Stream.
Ähnlich wie bei einer Kasette könnte man sagen (nur ohne umdrehen).

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

A
av1406 Themenstarter:in
72 Beiträge seit 2009
vor 12 Jahren

Danke Dir für die Aufklärung...!

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

bei vielen Stream, insbesondere beim MemoryStream, kann die Position über die Position-Eigenschaft direkt auf 0 gesetzt werden.


myMemoryStream.Position = 0;

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"