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
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top