¿Cómo obtener la salida de un XSLCompiledTransform en un XMLReader?
-
24-10-2019 - |
Pregunta
Yo tengo un XslCompiledTransform
objeto, y quiero la salida en un XmlReader
Objeto, ya que necesito pasarlo a través de una segunda hoja de estilo. Me estoy confundiendo un poco: puedo transformar con éxito un poco de XML y leerlo usando un StreamReader
o un XmlDocument
, pero cuando intento un XmlReader
, No tengo nada.
En el ejemplo a continuación, stylesheet
es mi XslCompiledTransform
objeto. Los primeros dos Console.WriteLine
Salida de llamadas El XML transformado correcto, pero la tercera llamada no da XML. Supongo que podría ser que el XmlTextReader
¿Esperar texto, así que tal vez necesite envolver esto en un corrector de transmisión ...? ¿Qué estoy haciendo mal?
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
Solución
los XmlReader.ReadOuterXml
El método lee el XML para el nodo actual. Cuando crea el lector por primera vez, no hay nodo actual, por lo que ReadOuterXml
no devolverá nada.
Si agrega la línea:
reader.Read();
...antes de ReadOuterXml()
Llame, entonces funcionará como espere.
PD que normalmente deberías probar el resultado del Read()
Método para garantizar que el lector realmente tenga algo que leer.