powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / XSLTC трансформация
9 сообщений из 9, страница 1 из 1
XSLTC трансформация
    #37785651
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь разобраться с компилированным 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
XSLTC трансформация
    #37786613
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

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



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

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

Да, кодировка указанная атрибутом encoding должна соответствовать фактической для документа.
В XML по- умолчанию используется кодировка utf-8 набора символов Unicode , включающего глифы большинства имеющихся в мире языков.
...
Рейтинг: 0 / 0
XSLTC трансформация
    #37787003
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidкодировка указанная атрибутом encoding должна соответствовать фактической для документа.Так и есть. С XML не первый год общаюсь. И я же говорю - трансформация XML + XSL работает. Хотелось бы заставить работать XML + JAR
...
Рейтинг: 0 / 0
XSLTC трансформация
    #37787811
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался. Скачал 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
XSLTC трансформация
    #37788329
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidВ XML по- умолчанию используется кодировка utf-8 набора символов Unicode Вы ничего с US-ASCII не перепутали?
...
Рейтинг: 0 / 0
XSLTC трансформация
    #37788368
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

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


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