Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

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);

 xw.Close;

}

// простой тестовый класс

public class BookUtils {

 public BookUtils {}

 public string ShowText {

return "This came from the ShowText method!";

 }

}

Вывод преобразования (

argSample.xml
) выглядит так:

<?xml version="1.0"?>

<books>

 <discbook>

<booktitle>The Autobiography of Benjamin Franklin</booktitle>

<showtext>This came from the ShowText method!</showLext>

 </discbook>

 <discbook>

<booktitle>The Confidence Man</booktitle>

<showtext>This came from the ShowText method!</showtext>

 </discbook>

 <discbook>

<booktitle>The Gorgias</booktitle>

<showtext>This came from the ShowText method!</showtext>

 </discbook>

 <discbook>

<booktitle>The Great Cookie Caper</booktitle>

<showtext>This came from the ShowText method!</showtext>

 </discbook>

 <discbook>

<booktitle>A Really Great Book</booktitle>

<showtext>This came from the ShowText method!</showtext>

 </discbook>

</books>

Определим новый класс

BookUtils
. В этом классе мы имеем один практически бесполезный метод, который возвращает строку
"This came from the ShowText method!"
. Для события
button1_Click
создаются
XPathDocument
и
XslTransform
так же, как это делалось раньше, но с некоторыми исключениями. В этот раз мы собираемся создать документ XML, поэтому используем
XMLWriter
вместо
FileStream
. Вот эти изменения:

XsltArgumentList argBook=new XsltArgumentList;

BookUtils bu=new BookUtils;

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

Именно здесь создается

XsltArgumentList
. Мы создаем экземпляр объекта
BookUtils
, и когда вызывается метод
AddExtensionObject
, ему передается пространство имен расширения и объект, из которого мы хотим вызывать методы. Когда делается вызов
Transform
, ему передаются
XsltArgumentList
(
argBook
) вместе с
XPathNavigator
и созданный объект
XmlWriter
. Вот документ
booksarg.xsl
:

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

 <xsl:output method="xml" indent="yes"/>

 <xsl:template match="/">

<xsl:element name="books">

<xsl:apply-templates/>

</xsl:element>

 </xsl:template>

 <xsl:template match="bookstore">

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

 </xsl:template>

 <xsl:template match="book">

<xsl:element name="discbook">

<xsl:element name="booktitle">

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

</xsl:element>

<xsl:element name="showtext">

<xsl:value-of select="bookUtil:ShowText"/>

</xsl:element>

</xsl:element>

 </xsl:template>

</xsl:stylesheet>

Здесь имеются две важные строки. В начале добавляется пространство имен, которое создается при добавлении объекта к

XsltArgumentList
. Затем применяется стандартный синтаксис использования префикса перед пространством имен XSLT и вызывается метод.

Иначе это можно было бы выполнить с помощью сценария XSLT. В таблицу стилей можно включить код C#, VB и JavaScript. Большим достоинством этого является то, что в отличие от текущих реализаций, сценарий компилируется при вызове

Transform.Load
; таким образом выполняются уже откомпилированные сценарии, в значительной степени так же, как работает ASP.NET. Давайте выполним предыдущий пример таким способом. Добавим сценарий к таблице стилей. Эти изменения можно увидеть в файле
bookscript.xsl
:

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

Эволюционер из трущоб. Том 7

Панарин Антон
7. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 7

Девочка для Генерала. Книга первая

Кистяева Марина
1. Любовь сильных мира сего
Любовные романы:
остросюжетные любовные романы
эро литература
4.67
рейтинг книги
Девочка для Генерала. Книга первая

Темный Патриарх Светлого Рода

Лисицин Евгений
1. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода

Цусима — знамение конца русской истории. Скрываемые причины общеизвестных событий. Военно-историческое расследование. Том II

Галенин Борис Глебович
Научно-образовательная:
военная история
5.00
рейтинг книги
Цусима — знамение конца русской истории. Скрываемые причины общеизвестных событий. Военно-историческое расследование. Том II

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Новый Рал 10

Северный Лис
10. Рал!
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Новый Рал 10

Бестужев. Служба Государевой Безопасности. Книга четвертая

Измайлов Сергей
4. Граф Бестужев
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга четвертая

Кодекс Крови. Книга Х

Борзых М.
10. РОС: Кодекс Крови
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга Х

Вперед в прошлое 2

Ратманов Денис
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 2

Боевой маг. Трилогия

Бадей Сергей
114. В одном томе
Фантастика:
фэнтези
9.27
рейтинг книги
Боевой маг. Трилогия

Сердце для стража

Каменистый Артем
5. Девятый
Фантастика:
фэнтези
боевая фантастика
9.20
рейтинг книги
Сердце для стража

Тайны затерянных звезд. Том 1

Лекс Эл
1. Тайны затерянных звезд
Фантастика:
боевая фантастика
космическая фантастика
фэнтези
5.00
рейтинг книги
Тайны затерянных звезд. Том 1

Седьмая жена короля

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Седьмая жена короля

Плохой парень, Купидон и я

Уильямс Хасти
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Плохой парень, Купидон и я