Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / XSLTC трансформация / 9 сообщений из 9, страница 1 из 1
08.05.2012, 01:05:11
    #37785651
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
Пытаюсь разобраться с компилированным XSL . Написал XSL, командой
Код: sql
1.
java org.apache.xalan.xsltc.cmdline.Compile -j test.jar test.xsl

упаковал ее в jar архив. Проверяю трансформацию командой
Код: sql
1.
java -cp test.jar org.apache.xalan.xsltc.cmdline.Transform test.xml test

Все работает. Теперь пытаюсь вызвать трансформацию из кода. За основу взял пример кода из вышеприведенного мануала
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
import java.util.Properties;
import javax.xml.transform.Transformer;
import java.io.FileOutputStream;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Templates;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
...
// Set the TransformerFactory system property.
// Note: For more flexibility, load properties from a properties file.
String key = "javax.xml.transform.TransformerFactory";
String value = "org.apache.xalan.xsltc.trax.TransformerFactoryImpl";
Properties props = System.getProperties();
props.put(key, value);
System.setProperties(props);
...
String xslInURI;
// Instantiate the TransformerFactory, and use it with a StreamSource
// XSL stylesheet to create a translet as a Templates object.
TransformerFactory tFactory = TransformerFactory.newInstance();
Templates translet = tFactory.newTemplates(new StreamSource(xslInURI));
...
String xmlInURI;
String htmlOutURI;
String xmlInURI2;
String htmlOutURI2;
...
// For each thread, instantiate a new Transformer, and perform the
// transformations on that thread from a StreamSource to a StreamResult;
Transformer transformer = translet.newTransformer();
transformer.transform(new StreamSource(xmlInURI),
                  new StreamResult(new FileOutputStream(htmlOutURI)));
transformer.transform(new StreamSource(xmlInURI2),
                  new StreamResult(new FileOutputStream(htmlOutURI2)));
...

вот, что у меня получилось
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
String key = "javax.xml.transform.TransformerFactory";
String value = "org.apache.xalan.xsltc.trax.TransformerFactoryImpl";
System.setProperty(key, value);

Source LSrc = new StreamSource(new InputStream(new File("test.xml")));
Source XSLSrc = new StreamSource("jar:file:/C:/Program Files/fop-1.0/build/test.jar!/test.class");

SAXResult SAXRes := new SAXResult()
SAXRes.Handler := fop.getDefaultHandler();

TransformerFactory factory := new TransformerFactory();
Transformer trans := factory.newTemplates(XSLSrc).newTransformer();

trans.transform(Src, SAXRes);


и отгребаю ошибку на вызове transform
Ошибка: 'Invalid byte 2 of 2-byte UTF-8 sequence.'
Критическая ошибка: 'Невозможно откомпилировать таблицу стилей'
javax.xml.transform.TransformerConfigurationException: Невозможно откомпилировать таблицу стилей
at org.apache.xalan.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:824)
если выделенную строку заменить на
Код: java
1.
Source XSLSrc = new StreamSource(new InputStream(new File("C:/Program Files/fop-1.0/build/test.xsl")));

то все работает, но, естественно, используется некомпилированная XSL.

Ткните, пожалуйста, где я не прав. Xalan используется версии 2.7

С уважением, Vasilisk
...
Рейтинг: 0 / 0
09.05.2012, 02:51:09
    #37786613
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
_Vasilisk_,

Код: xml
1.
<?xml version="1.0" encoding="utf-8"?>



+ сам файл длжен быть сохранен в кодировке UTF-8.
...
Рейтинг: 0 / 0
09.05.2012, 13:37:35
    #37786788
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
ivanov-void+ сам файл длжен быть сохранен в кодировке UTF-8.Это для XSL или XML? В XSL так и есть. Более того в XSL вообще только английские символы. XML не уверен. Быть может он в windows-1251 о чем есть соответствующий пролог.

И откуда такое требование? Особенности реализации XSLT процессора?
...
Рейтинг: 0 / 0
09.05.2012, 19:03:22
    #37787001
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
_Vasilisk_,

Да, кодировка указанная атрибутом encoding должна соответствовать фактической для документа.
В XML по- умолчанию используется кодировка utf-8 набора символов Unicode , включающего глифы большинства имеющихся в мире языков.
...
Рейтинг: 0 / 0
09.05.2012, 19:06:46
    #37787003
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
ivanov-voidкодировка указанная атрибутом encoding должна соответствовать фактической для документа.Так и есть. С XML не первый год общаюсь. И я же говорю - трансформация XML + XSL работает. Хотелось бы заставить работать XML + JAR
...
Рейтинг: 0 / 0
10.05.2012, 13:53:21
    #37787811
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
Разобрался. Скачал Xalan, а с ним шли примеры. Решение такое
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
String key = "javax.xml.transform.TransformerFactory";
String value = "org.apache.xalan.xsltc.trax.TransformerFactoryImpl";
System.setProperty(key, value);

Source LSrc = new StreamSource(new InputStream(new File("test.xml")));
Source XSLSrc = new StreamSource("test");  // Имя XSL файла без расширения (не jar)

SAXResult SAXRes := new SAXResult()
SAXRes.Handler := fop.getDefaultHandler();

TransformerFactory factory := new TransformerFactory();
factory.setAttribute("use-classpath", Boolean.TRUE);
Transformer trans := factory.newTemplates(XSLSrc).newTransformer();

trans.transform(Src, SAXRes);

Сам test.jar должен быть указан в classpath
...
Рейтинг: 0 / 0
10.05.2012, 18:32:51
    #37788329
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
ivanov-voidВ XML по- умолчанию используется кодировка utf-8 набора символов Unicode Вы ничего с US-ASCII не перепутали?
...
Рейтинг: 0 / 0
10.05.2012, 18:59:30
    #37788368
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
Basil A. Sidorov,

Нет.
...
Рейтинг: 0 / 0
10.05.2012, 19:28:30
    #37788392
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLTC трансформация
ivanov-void Нет. Перечитал, пожалуй, был неправ.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / XSLTC трансформация / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]