Как получить вывод XslCompiledTransform в XmlReader? - PullRequest
1 голос
/ 03 июня 2010

У меня есть объект XslCompiledTransform, и я хочу получить вывод в объекте XmlReader, так как мне нужно пропустить его через вторую таблицу стилей. Я немного запутался - я могу успешно преобразовать какой-то XML и прочитать его, используя StreamReader или XmlDocument, но когда я пытаюсь XmlReader, я ничего не получаю.

В приведенном ниже примере stylesheet - это мой XslCompiledTransform объект. Первые два вызова Console.WriteLine выводят правильный преобразованный XML, но третий вызов не дает XML. Я предполагаю, что, возможно, XmlTextReader ожидает текст, поэтому, возможно, мне нужно обернуть это в StreamReader ..? Что я делаю не так?

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

1 Ответ

2 голосов
/ 03 июня 2010

Метод XmlReader.ReadOuterXml читает XML для текущего узла . При первом создании считывателя текущий узел отсутствует, поэтому ReadOuterXml ничего не вернет.

Если добавить строку:

reader.Read();

... до вызова ReadOuterXml(), тогда он будет работать так, как вы ожидаете.

P.S. Обычно вы должны проверить результат метода Read(), чтобы убедиться, что читателю действительно есть, что читать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...