Вот пример того, как это сделать, взятый из документации MSDN :
// Load an XPathDocument.
XPathDocument doc = new XPathDocument("books.xml");
// Locate the node fragment.
XPathNavigator nav = doc.CreateNavigator();
XPathNavigator myBook = nav.SelectSingleNode("descendant::book[@ISBN = '0-201-63361-2']");
// Create a new object with just the node fragment.
XmlReader reader = myBook.ReadSubtree();
reader.MoveToContent();
// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("single.xsl");
// Transform the node fragment.
xslt.Transform(reader, XmlWriter.Create(Console.Out, xslt.OutputSettings));
Для получения дополнительной информации см .: http://technet.microsoft.com/en-us/library/wkx4fcc4.aspx
Обратите внимание :
При преобразовании данных, содержащихся в объекте XmlDocument
или XPathDocument
, преобразования XSLT применяются к документу в целом.Другими словами, если вы передадите узел, отличный от корневого узла документа, это не помешает процессу преобразования получить доступ ко всем узлам в загруженном документе.Чтобы преобразовать фрагмент узла, необходимо создать отдельный объект, содержащий только фрагмент узла, и передать этот объект в метод Transform.
Именно поэтому применение преобразования к узлу документа может привести кнеожиданные и нежелательные результаты - например, преобразование может получить доступ к другим узлам, которые не входят в поддерево предоставленного узла - например, к братьям и сестрам или предкам.
Именно поэтому я настоятельно рекомендую не простовызовите Transform()
на любом узле (кроме узла-документа).