Frage

ich habe ein XslCompiledTransform Objekt, und ich möchte die Ausgabe in einem XmlReader Objekt, wie ich es durch ein zweites Stylesheet übergeben muss. Ich werde ein bisschen verwirrt - ich kann einige XML erfolgreich verwandeln und es mit beiden A lesen StreamReader oder an XmlDocument, aber wenn ich einen versuche XmlReader, Ich bekomme nichts.

Im folgenden Beispiel, stylesheet ist mein XslCompiledTransform Objekt. Die ersten zwei Console.WriteLine Auf rufe die korrekte transformierte XML aus, aber der dritte Aufruf gibt kein XML an. Ich vermute, es könnte sein, dass die XmlTextReader Erwarten Sie einen Text, also muss ich dies vielleicht in einen StreamReader einwickeln ..? Was mache ich falsch?

MemoryStream transformed = new MemoryStream();
stylesheet.Transform(input, args, transformed);
transformed.Position = 0;

StreamReader s = new StreamReader(transformed);
Console.WriteLine("s = " + s.ReadToEnd()); // writes XML
transformed.Position = 0;

XmlDocument doc = new XmlDocument();
doc.Load(transformed);
Console.WriteLine("doc = " + doc.OuterXml); // writes XML
transformed.Position = 0;

XmlReader reader = new XmlTextReader(transformed);
Console.WriteLine("reader = " + reader.ReadOuterXml()); // no XML written
War es hilfreich?

Lösung

Das XmlReader.ReadOuterXml Methode liest den XML für die Stromknoten. Wenn Sie den Leser zum ersten Mal erstellen, gibt es also keinen aktuellen Knoten, also ReadOuterXml Wird nichts zurückgeben.

Wenn Sie die Zeile hinzufügen:

reader.Read();

...Vor dem ReadOuterXml() Rufen Sie an, dann wird es funktionieren, wie Sie es erwarten.

Ps Sie sollten normalerweise das Ergebnis der testen Read() Methode, um sicherzustellen, dass der Leser tatsächlich etwas zu lesen hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top