Как получить вывод XslCompiledTransform в XmlReader?

Я имею XslCompiledTransform объект, и я хочу вывод в XmlReader объект, поскольку я должен передать его через вторую таблицу стилей. Я становлюсь немного смущенным - я могу успешно преобразовать некоторый XML и считать его с помощью любого a 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
задан abatishchev 9 March 2013 в 10:00
поделиться

1 ответ

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

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

reader.Read();

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

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

2
ответ дан 3 September 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: