Немного известной особенностью является то, что вы можете фактически преобразовывать данные непосредственно в XmlDocument
DOM или в LINQ-to-XML XElement
или XDocument
(с помощью метода CreateWriter()
) без необходимости проходить текстовую форму, получая экземпляр XmlWriter
для передачи им данных.
Предполагая, что ваш ввод XML IXPathNavigable
и вы загрузили экземпляр XslCompiledTransform
, вы можете сделать следующее:
XmlDocument target = new XmlDocument(input.CreateNavigator().NameTable);
using (XmlWriter writer = target.CreateNavigator().AppendChild()) {
transform.Transform(input, writer);
}
Затем у вас есть преобразованный документ в документе taget
. Обратите внимание, что в transform
имеются другие перегрузки, позволяющие передавать аргументы и расширения XSLT в таблицу стилей.
Если вы хотите, вы можете написать свой собственный статический вспомогательный метод или метод расширения для выполнения преобразования по мере необходимости. Однако может быть хорошей идеей кэшировать преобразование, поскольку его загрузка и компиляция не бесплатны.