C# для профессионалов. Том II | страница 23
В первом примере, который мы рассмотрим, берется документ >books.xml и преобразуется в простой документ HTML для вывода. (Этот код можно найти в папке >XPathXSLSample3.) Необходимо будет добавить следующие операторы >using:
>using System.IO;
>using System.Xml.Xsl;
>using System.Xml.XPath;
Вот код, выполняющий преобразование:
>private void button1_Click(object sender System.EventArgs e) {
> //создать новый XPathDocument
> XPathDocument doc=new XPathDocument("..\\..\\..\\booksxpath.XML");
> // создать новый XslTransForm
> XslTransform transForm=new XslTransform();
> transForm.Load("..\\..\\..\\books.xsl");
> // этот FileStream будет нашим выводом
> FileStream fs=new FileStream("..\\..\\..\\booklist.html", FileMode.Create);
> // Создать Navigator
> XPathNavigator nav=((IXPathNavigable)doc).CreateNavigator();
> // Выполнить преобразование. Файл вывода создается здесь.
> transForm.Transform(nav, null, fs);
>}
Сделать это преобразование проще почти невозможно. Сначала создается объект на основе >XPathDocument и объект на основе >XslTransform. Затем файл >bookspath.xml загружается в >doc, a >books.xsl в >transForm. В этом примере для записи нового документа HTML на диск создается объект >FileStream.
Если бы это было приложение ASP.NET, мы использовали бы объект >TextWriter и передавали бы его в объект >HttpResponse. Если бы мы преобразовывали в другой документ XML, то применялся бы объект на основе >XmlWriter. После того как объекты >XPathDocument и >XslTransform будут готовы, мы создаем >XPathNavigator на >doc и передаем >nav и этот >stream в метод >Transform объекта >transForm. >XslTransform имеет несколько перегружаемых версий, получающих комбинации навигаторов, >XsltArgumentList (подробнее об этом позже) и потоков ввода/вывода. Параметром навигатора может быть >XPathNavigator или любой объект, реализующий интерфейс >IXPathNavigable. Потоки ввода/вывода могут быть >TextWriter, >Stream или объектом на основе >XmlWriter.
Документ >books.xsl является таблицей стилей. Документ выглядит следующим образом:
>
>
>
>
>
>
>
> > >
>
>
>
>
>
>
>
> > > >