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



>  

>

Ранее упоминался объект >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);

> xw.Close();

>}


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

>public class BookUtils {

> public BookUtils() {}


> public string ShowText() {

>  return "This came from the ShowText method!";

> }

>}

Вывод преобразования (>argSample.xml) выглядит так:

>

>

>  The Autobiography of Benjamin Franklin

>  This came from the ShowText method!

>  The Confidence Man

>  This came from the ShowText method!

>  The Gorgias

>  This came from the ShowText method!

>  The Great Cookie Caper

>  This came from the ShowText method!

>  A Really Great Book

>  This came from the ShowText method!

>

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

>XsltArgumentList argBook=new XsltArgumentList();