Wie bekomme ich die Ausgabe eines XSL -kompilierten TRANSFORM in einen XMLReader?
-
24-10-2019 - |
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
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.