Как получить вывод XslCompiledTtransform в XMLreader?
-
24-10-2019 - |
Вопрос
у меня есть XslCompiledTransform
объект, и я хочу вывода в XmlReader
Объект, так как мне нужно пройти через вторую таблицу стилей. Я немного запутался - я могу успешно преобразовать немного XML и прочитать его, используя любой StreamReader
или XmlDocument
, но когда я пробую XmlReader
, Я ничего не получаю.
В примере ниже, stylesheet
мой XslCompiledTransform
объект. Первые два Console.WriteLine
Вызовы выводят правильный преобразованный XML, но третий вызов не дает XML. Я предполагаю, что это может быть, что XmlTextReader
Ожидает текст, так что, может быть, мне нужно обернуть это в потоковую проверку ..? Что я делаю не так?
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
Решение
А XmlReader.ReadOuterXml
Метод считывает XML для текущий узел. Анкет Когда вы сначала создаете читателя, текущего узла нет, поэтому ReadOuterXml
ничего не вернет.
Если вы добавите линию:
reader.Read();
...перед ReadOuterXml()
Позвоните, тогда это будет работать, как вы ожидаете.
PS вы обычно должны проверить результат Read()
Метод, чтобы убедиться, что читателю действительно есть что прочитать.