Работа с XSLT в Java

Этот язык для описания преобразований XML-документа применяется не только для приведения XML-документов к некоторому “читаемому” виду, но и для изменения структуры XML-документа.

К примеру, XSLT можно использовать для:

· удаления существующих или добавления новых элементов в XML-документ;

· создания нового XML-документа на основании заданного;

· извлечения информации из XML-документа с разной степенью детализации;

· преобразования XML-документа в документ HTML или документ другого типа.

Пусть требуется построить новый XML-файл на основе файла
students.xml, у которого будет удален атрибут login. Элементы country, city, street станут атрибутами элемента address и элемент telephone станет дочерним элементом элемента address. Следует воспользоваться XSLT для решения данной задачи. В следующем коде приведено содержимое файла таблицы стилей students.xsl, решающее поставленную задачу.

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" />

<xsl:template match="/">

<students>

<xsl:apply-templates />

</students>

</xsl:template>

<xsl:template match="student">

<xsl:element name="student">

<xsl:attribute name="faculty">

<xsl:value-of select="@faculty"/>

</xsl:attribute>

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

<xsl:element name="address">

<xsl:attribute name="country">

<xsl:value-of select="address/country"/>

</xsl:attribute>

<xsl:attribute name="city">

<xsl:value-of select="address/city"/>

</xsl:attribute>

<xsl:attribute name="street">

<xsl:value-of select="address/street"/>

</xsl:attribute>

<xsl:element name="telephone">

<xsl:attribute name="number">

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

</xsl:attribute>

</xsl:element>

</xsl:element>

</xsl:element>

</xsl:template>

</xsl:stylesheet>

Преобразование XSL лучше сделать более коротким, используя ATV (attribute template value), т.е «{}»

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" />

<xsl:template match="/">

<students>

<xsl:apply-templates />

</students>

</xsl:template>

<xsl:template match="student">

<student faculty=”{@faculty}">

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

<address country=”{address/country}"

city=”{address/city}”

street=”{address/street}”>

<telephone number="{telephone}"/>

</address>

</student>

</xsl:template>

</xsl:stylesheet>

Для трансформации одного документа в другой можно использовать, например, следующий код.

/* пример # 14 : трансформация XML : SimpleTransform.java */

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.stream.StreamResult;

import javax.xml.transform.stream.StreamSource;

public class SimpleTransform {

public static void main(String[] args) {

try {

TransformerFactory tf =

TransformerFactory.newInstance();

//установка используемого XSL-преобразования

Transformer transformer =

tf.newTransformer(new StreamSource("students.xsl"));

//установка исходного XML-документа и конечного XML-файла

transformer.transform(

new StreamSource("students.xml"),

new StreamResult("newstudents.xml"));

System.out.print("complete");

} catch(TransformerException e) {

e.printStackTrace();

}

}

}

В результате получится XML-документ newstudents.xml следующего вида:

<?xml version="1.0" encoding="UTF-8"?>

<students>

<student faculty="mmf">

<name>Mitar Alex</name>

<address country="Belarus" city="Minsk"

street="Kalinovsky 45">

<telephone number="3462356"/>

</address>

</student>

<student faculty="mmf">

<name>Pashkun Alex</name>

<address country="Belarus" city="Brest"

street="Knorina 56">

<telephone number="4582356"/>

</address>

</student>

</students>

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100