Как получить поток из XMLWriter?

Экземпляр System.Xml.XmlWriter записывает в базовое право Stream? (независимо от конкретной реализации XmlWriter)

Так почему же у программиста нет доступных методов для извлечения объекта Stream из XmlWriter?

Я уверен, что упускаю что-то простое. Заранее спасибо.

PS: Если кто-то спросит, то, что я действительно хочу сделать, это получить поток из экземпляра XmlWriter, переданный мне, и создать из него XmlReader (сначала очистить Writer, если это необходимо).

Затем мне нужно использовать XmlReader в качестве параметра для метод XslCompiledTransform.Transform

Изменить: пунктуация


person K_M    schedule 30.03.2011    source источник


Ответы (1)


Вы не должны этого делать. Даже если вы знаете, что под XmlWriter есть Stream, но это детали реализации, и XmlWriter не должен вам их сообщать. Также поток может быть только для чтения или только для записи, как вы будете читать из него?

Вы должны передать исходный поток, который использовался для создания экземпляра XmlWriter, в место, где вы хотите прочитать поток, если вы знаете, что этот поток может быть как записанным, так и прочитанным. В противном случае вам следует создать новый поток, который будет читать контент, написанный XmlWriter.

person Snowbear    schedule 30.03.2011
comment
› Вы не должны этого делать. Кажется, я все равно не могу. Но ваше объяснение имеет смысл: нет гарантии, что поток будет прочитан. Спасибо за это. › В противном случае вам следует создать новый поток, который будет читать содержимое, написанное XmlWriter. Я все еще борюсь с тем, как это сделать? - person K_M; 30.03.2011
comment
@K_M, это зависит от того, как вы создаете этот поток для XmlWriter - это ключевой момент здесь. - person Snowbear; 30.03.2011
comment
JIM-компилятор, мне передается экземпляр XmlWriter и поэтому я не буду знать заранее, как был создан Stream. Возможно, конструкция несовершенна. Но я так понимаю - тогда невозможно получить поток (новый или какой-либо другой) только из XmlWriter? Что означает, что при наличии XmlWriter невозможно создать XmlReader с теми же данными? (Извините, что я не по теме. Дайте мне знать, если это противоречит этикету здесь, в stackoverflow). Спасибо за ваши ответы. - person K_M; 30.03.2011
comment
@K_M, не думай, что это не совсем по теме. Вы можете попробовать привести переданный XmlWriter к его реальному классу реализации (XmlWriter является абстрактным), вам нужно будет знать, какие реализации XmlWriter могут быть переданы вам. Некоторые наследники XmlWriter, например XmlTextWriter, выставляют передаваемый поток (свойство XmlTextWriter.BaseStream), можете попробовать, я не пробовал. Это будет серьезный взлом, но если он вам действительно нужен... - person Snowbear; 30.03.2011
comment
JIM-компилятор. Для меня имеет смысл принимать только XmlTextWriter, а не его базовый класс XmlWriter. Оттуда я могу использовать свойство BaseStream и создать из него новый XmlReader. Задача решена. Спасибо! - person K_M; 30.03.2011