<TABLE BORDER='2'>

     <TD>Name</TD>

     <TD>Mass</TD>

     <TD>Radius</TD>

     <TD>Day</TD>

     <xsl:apply-templates/>

    </TABLE>

   </BODY>

  </HTML>

 </xsl:template>

 <xsl:template match='PLANET'>

  <TR>

   <TD><xsl:value-of select='NAME'/></TD>

   <TD><xsl:apply-templates select='MASS'/></TD>

   <TD><xsl:apply-templates select='RADIUS'/></TD>

   <TD><xsl:applу-templates select='DAY'/></TD>

  </TR>

 </xsl:template>

 <xsl:template match='MASS'>

  <xsl:value-of select='.'/>

 </xsl:template>

 <xsl:template match='RADIUS'>

  <xsl:value-of select='.'/>

 </xsl:template>

 <xsl:template match='DAY'>

  <xsl:value-of select='.'/>

 </xsl:template>

</xsl:stylesheet>

Такой код, безусловно, работает, но дает лишь ограниченные средства работы и зависит от нестандартных расширений. За исключением случая, когда вы осуществляете только несколько простых вызовов, обычно лучше начать работать в Java и взаимодействовать с процессором XSLT.

Каждый из процессоров XSLT Xalan, Saxon, XT и Oracle определяет API, к которому можно обращаться из Java. Достаточно только проверить, что нужные файлы JAR находятся в classpath Java. Мы уже рассматривали, как работать с файлами JAR и путями к классам, в главе 1; теперь мы перейдем к написанию кода на Java, а не просто выполнению предопределенных классов из командной строки. Код можно загрузить с http://www.newriders.com/books/title.cfm?isbn=0735711364, поэтому если вы не программист на Java, можете пропустить эту часть главы.

Работа с API XSLT для Java

Во всех основанных на Java процессорах XSLT определен объемный интерфейс, API, для связи с Java. Как правило, при помощи API вызываются методы и создаются объекты Java, как мы увидим в этой главе. Но все процессоры XSLT определяют свои API по-разному, и обычно эти API довольно велики, поскольку каждый процессор может создавать собственные иерархии классов по своему усмотрению. В следующих разделах мы пройдем по этапам создания XSLT-преобразований из Java с использованием процессоров XSLT Xalan, Saxon, XT и Oracle. Все их возможности описаны в документации. Заметьте, что описание API большинства этих процессоров может само занять отдельную книгу, потому наше обсуждение вынужденно представляет собой лишь краткий обзор.

НАЗВАНИЯ ФАЙЛОВ JAVA

В отличие от остальных примеров книги, при создании файлов Java имеет значение имя файла. Java требует, чтобы имя файла совпадало с именем содержащегося в файле открытого класса. По этой причине для каждого листинга я включил в заголовок имя используемого файла. Например, заголовок «Листинг 10.7, xalanjava.java, взаимодействие Xalan с Java» означает, что перед тем, как использовать код листинга вместе с Java, необходимо сохранить листинг как xalanjava.java (для простоты имена всех открытых классов и файлов Java я писал в нижнем регистре). Обратите внимание: если вы загрузили код книги, этот пример будет называться 10-07.java, и перед работой с ним вам нужно будет его переименовать в xalanjava.java. Кроме того, требуемое имя файла будет приведено в комментариях в начале каждого файла Java.

Взаимодействие Xalan с Java

Несмотря на свой размер, Xalan — один из простейших процессоров XSLT для взаимодействия с Java. В качестве примера я создал новый класс Java, xalanjava, и для осуществления XSLT- преобразования к нему положено обращаться следующим образом:

C:>java xalanjava planets.xml planets.xsl planets.html

Чтобы создать XSLT-преобразование, я начну с создания объекта класса TransformerFactory в классе xalanjava:

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.stream.StreamSource;

import javax.xml.transform.stream.StreamResult;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerConfigurationException;

import java.io.FileOutputStream;

import java.iо.FileNotFoundException;

import java.io.IOException;

public class xalanjava {

 public static void main(String[] args)

  throws TransformerException, TransformerConfigurationException,

  FileNotFoundException, IOException {

  TransformerFactory tFactory = TransformerFactory.newInstance ();

  .

  .

  .

Имена документа XML, документа XSL и результирующего документа были нам переданы в аргументах соответственно как args[0], args[1] и args[2]. На следующем шаге нужно загрузить документ XSL в новый созданный мной объект TransformerFactory. Для этого я создал объект StreamSource и передал его в метод newTransformer

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату