Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

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
является таблицей стилей. Документ выглядит следующим образом:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/">

<html>

<head>

<title>Price List</title>

</head>

<body>

<table>

<xsl:apply-templates/>

</table>

</body>

</html>

 </xsl:template>

 <xsl:template match="bookstore">

<xsl:apply-templates select= "book"/>

 </xsl:template>

 <xsl:template match="book">

<tr><td>

<xsl:value-of select="title"/>

</td><td>

<xsl:value-of select="price"/>

</td></tr>

 </xsl:template>

</xsl:stylesheet>

Ранее упоминался объект

XsltArgumentList
. Это способ, которым можно объект с методами связать с пространством имен. Когда это сделано, можно вызывать методы во время преобразования. Рассмотрим пример, чтобы понять, как это работает (находится в
XPathXSLSample4
):

private void button1_Click(object sender, System.EventArgs e) {

 // новый XPathDocument

 XPathDocument doc=new XPathDocument("..\\..\\..\\booksxpath.xml");

 // новый XslTransform

 XslTransform transForm=new XslTransform;

 transForm.Load("..\\..\\..\\booksarg.xsl");

 // новый XmlTextWriter, так как мы создаем новый документ xml

 XmlWriter xw=new XmlTextWriter(..\\..\\..\\argSample.xml", null);

 // создать XslArgumentList и новый объект BookUtils

 XsltArgumentList argBook=new XsltArgumentList;

 BookUtils bu=new BookUtils;

 // это сообщает список аргументов BookUtils

 argBook.AddExtensionObject("urn:ProCSharp", bu);

 // новый XPathNavigator

 XPathNavigator nav=((IXPathNavigable)doc).CreateNavigator;

 // выполнить преобразование

 transForm.Transform(nav, argBook, xw);

  • Читать дальше
  • 1
  • ...
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: