Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / xml -> xsl - трансформация / 9 сообщений из 9, страница 1 из 1
18.03.2005, 20:26
    #32969221
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
суть такова есть кусок кода выполняющий трансформацию для общности скажу что это фильтр-сервлет.

Код: plaintext
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.
                TransformerFactory fact = TransformerFactory.newInstance();
                String xslF =  conf.getServletContext().getRealPath ((String) req.getAttribute("transformer-xsl-file"));
                Transformer trans = fact.newTransformer( new  SAXSource ( new  InputSource( new  FileReader(xslF))));
                CharArrayWriter chrez =  new  CharArrayWriter();
                String xml = data;
                 int  pos = xml.indexOf("<?xml");
                 if  (pos != - 1 )
                    xml = xml.substring(pos);
                logger.println("-- START BEFORE TRANSFORMED -----  " +  new  Date () + " ----------- ");
                logger.println(xml);
                logger.println("-- END BEFORE TRANSFORMED -- ");
                logger.flush ();

                trans.transform( new  StreamSource( new  CharArrayReader(xml.toCharArray())),
                         new  StreamResult(chrez));
                xml = chrez.toString();
                pos = xml.indexOf("<?xml");
                 if  (pos != - 1 )
                    xml = xml.substring(pos);
                String data_nova = "<!-- Transformed by black_zorro xml2html engine-->\n" + xml;
                logger.println("-- START AFTER TRANSFORMED -----  " +  new  Date () + " ----------- ");
                logger.println(data_nova);
                logger.println("-- END AFTER TRANSFORMED -- ");
                logger.flush ();
                resp.getWriter().write(data_nova);
входной поток задается в виде строки в кодировке windows-1251
файл трансформации тоже в виде windows-1251
как для входного xml так и для xsl
заданы прологи:
автор
<?xml version="1.0" encoding="windows-1251" standalone="yes"?>

после трансформации получается на выходе фигня вида:
Код: plaintext
1.
2.
3.
 ВремС
#1109;твед

в чем может быть глюк
...
Рейтинг: 0 / 0
18.03.2005, 20:31
    #32969224
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
уточнение результат выглядит примерно так:
...
Рейтинг: 0 / 0
19.03.2005, 14:04
    #32969581
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
Результат у вас идет в кодировке ASCII. Попробуйте покрутить параметры resp.
...
Рейтинг: 0 / 0
21.03.2005, 14:04
    #32971304
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
да дело не в responce я же показываю на картинке что такую кодировку мне выдает именно xsl трансформатор - я сбрасываю результат его работы в лог, - это картинка и также отдаю клиенту в браузер там такая же фигня.
новый вариант который также криво работает.
Код: plaintext
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.
               TransformerFactory fact = TransformerFactory.newInstance();
                String xslF =  conf.getServletContext().getRealPath ((String) req.getAttribute("transformer-xsl-file"));
                Transformer trans = fact.newTransformer( new  SAXSource ( new  InputSource( new  InputStreamReader( new  FileInputStream(xslF), "Cp1251"))));
                ByteArrayOutputStream bout =  new  ByteArrayOutputStream( 4096 );
                Writer chrez =  new  OutputStreamWriter(bout, "Cp1251");
                String xml = data;
                 int  pos = xml.indexOf("<?xml");
                 if  (pos != - 1 )
                    xml = xml.substring(pos);
                logger.println("-- START BEFORE TRANSFORMED -----  " +  new  Date () + " ----------- ");
                logger.println(xml);
                logger.println("-- END BEFORE TRANSFORMED -- ");
                logger.flush ();
                trans.setOutputProperty(OutputKeys.ENCODING, "windows-1251");
                trans.transform( new  StreamSource( new  CharArrayReader(xml.toCharArray())),
                         new  StreamResult(chrez));
                chrez.flush ();
                xml = bout.toString("Cp1251");
                pos = xml.indexOf("<?xml");
                 if  (pos != - 1 )
                    xml = xml.substring(pos);
                String data_nova = "<!-- Transformed by black_zorro xml2html engine-->\n" + xml;
                logger.println("-- START AFTER TRANSFORMED -----  " +  new  Date () + " ----------- ");
                logger.println(data_nova);
                logger.println("-- END AFTER TRANSFORMED -- ");
                logger.flush ();
                resp.getWriter().write(data_nova);
жду идей дальше.
...
Рейтинг: 0 / 0
21.03.2005, 14:36
    #32971392
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
фигня какая то творится, плюнул я на windows-1251 решил перейти на utf-8
заменил везде в коде и жабовском и xml|xsl windows-1251 и cp1251 на utf-8 и все заработало - кодировка страницы хоть в заголовке utf-8 а на самом деле чистый windows-1251.

поделитесь опытом как кто делал делает xsl трансформацию с русскими буквами - то я ощущаю себя не программистом а шаманом, сделал фиг знает что, получилась фиг знает что, и главное все работает.
...
Рейтинг: 0 / 0
21.03.2005, 16:05
    #32971691
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
У меня было похожее, в итоге оказалось, что исходный xml поступал уже в виде кракозяблов, переменная data откуда вообще берется.
Так же, иногда помогает, установка атрибута в таблице стилей, который отвечает за кодировку в значение UTF-8, этот атрибут принадлежит элементу <xsl:out ....> (или output).

зы В любом случае, изврщаться над таблицей стилей, так как у тебя во втором примере не стоит, это ни на что не влияет:) ты бы лучше над исходным xml это все проделал.
...
Рейтинг: 0 / 0
21.03.2005, 16:14
    #32971726
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
вот на всякий случай привожу фрагмент кода всего сервлета:
Код: plaintext
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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
 package  xmltools;
 import  org.xml.sax.InputSource;
 import  javax.servlet.*;
 import  javax.servlet.http.HttpServletResponse;
 import  javax.servlet.http.HttpServletResponseWrapper;
 import  javax.servlet.http.HttpServletRequest;
 import  javax.xml.transform.*;
 import  javax.xml.transform.stream.StreamSource;
 import  javax.xml.transform.stream.StreamResult;
 import  javax.xml.transform.sax.SAXSource;
 import  java.io.*;
 import  java.util.Date;


 public   class  xml2html  implements  Filter {
     public   void  destroy() {
        logger.flush ();
        logger.close ();
    }

     public  xml2html ()  throws  UnavailableException {
         try {
            logger =  new  PrintWriter( new  FileWriter ("logger.xml2html.machine"));
        } catch  (Exception e) { throw   new  UnavailableException (e.getMessage());}
    }
    PrintWriter logger;

     public   void  doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)  throws  ServletException, IOException {
         final  CharArrayWriter chw =  new  CharArrayWriter();
         final  PrintWriter pw =  new  PrintWriter(chw);
        HttpServletResponse nova_resp =  new  HttpServletResponseWrapper((HttpServletResponse)resp){
             public  PrintWriter getWriter()  throws  IOException {
                 return  pw;
            }
        };
        chain.doFilter(req, nova_resp);
        pw.flush();
        String data = chw.toString();
         int  pos = data.indexOf("<?xml");
         if  (pos != - 1 )
            data = data.substring(pos);

         if  (req.getAttribute("transformer-xsl-file") ==  null ) {
            logger.println("-- NO TRANSFORM START -----  " +  new  Date () + " ----------- ");
            logger.println(data);
            logger.println("-- NO TRANSFORM END -- ");
            logger.flush();
        }
         if  (req.getAttribute("transformer-xsl-file") !=  null ) {
            ((HttpServletResponse)resp).resetBuffer();
             try  {

                TransformerFactory fact = TransformerFactory.newInstance();

                String xslF =  conf.getServletContext().getRealPath ((String) req.getAttribute("transformer-xsl-file"));
                Transformer trans = fact.newTransformer( new  SAXSource ( new  InputSource( new  InputStreamReader( new  FileInputStream(xslF), "utf-8"))));
                ByteArrayOutputStream bout =  new  ByteArrayOutputStream( 4096 );
                Writer chrez =  new  OutputStreamWriter(bout, "utf-8");
                String xml = data;
                pos = xml.indexOf("<?xml");
                 if  (pos != - 1 )
                    xml = xml.substring(pos);
                logger.println("-- START BEFORE TRANSFORMED -----  " +  new  Date () + " ----------- ");
                logger.println(xml);
                logger.println("-- END BEFORE TRANSFORMED -- ");
                logger.flush ();
                trans.setOutputProperty(OutputKeys.ENCODING, "utf-8");


                trans.transform( new  StreamSource( new  CharArrayReader(xml.toCharArray())),
                         new  StreamResult(chrez));
                chrez.flush ();
                xml = bout.toString("utf-8");
                pos = xml.indexOf("<?xml");
                 if  (pos != - 1 )
                    xml = xml.substring(pos);
                String data_nova = "<!-- Transformed by black_zorro xml2html engine-->\n" + xml;
                logger.println("-- START AFTER TRANSFORMED -----  " +  new  Date () + " ----------- ");
                logger.println(data_nova);
                logger.println("-- END AFTER TRANSFORMED -- ");
                logger.flush ();
                resp.getWriter().write(data_nova);
            }  catch  (Exception e) {
                e.printStackTrace(resp.getWriter());
            }

        }
         else 
            resp.getWriter().write(data);
    }

    FilterConfig conf;
     public   void  init(FilterConfig config)  throws  ServletException {
        conf = config;
    }

}


авторУ меня было похожее, в итоге оказалось, что исходный xml поступал уже в виде кракозяблов
ах если бы все было так, я в лог выводил текст до и после трансформации - до был нормальный русский win-1251 после кракозябры.
...
Рейтинг: 0 / 0
21.03.2005, 17:03
    #32971911
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
А лог в какой кодировке? У меня была похожая заморочка- открываю xml , а русские буквы в виде крякозябров, вывожу DOM на system.out до и после трансформа - всё в норме. Выяснилось что ява по дефолту потоку в который записывает дом даёт кодировку юникод, а приблуда которой я смотрел готовый файл исходит из установки что файл записан в ютф. То есть кодировку надо указывать два раза - первый как атрибут в xml таге, чтоб прога знала в какой кодировке файл, второй- чтоб убедиться что файл действительно записан в нужной кодировке
...
Рейтинг: 0 / 0
22.03.2005, 15:40
    #32974011
Dima Yermak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml -> xsl - трансформация
у меня таже проюлема была (работаю на TomCat), но после того как прописал в catalina.sh
-Dfile.encoding="ISO-8859-1"
-Dmail.mime.charset="ISO-8859-1"
всё стало работать пучком
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / xml -> xsl - трансформация / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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