На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL
  
> Применить XSLT-преобразование , к XML по линку
    Известно, что если мы хотим преобразовать xml-файл, имеющийся у нас "в виде файла", то нужно добавить в его начало строчку
    ExpandedWrap disabled
      <?xml-stylesheet type='text/xsl' href='***.xsl'?>
    ,
    где ***.xsl - имя файла с xslt-преобразованием. После этого, при открытии xml-файла, тот автоматически будет обработан браузером и результат увидит пользователь.

    Вопрос, каким образом можно осуществлять такое преобразование "на лету", имея линк, по которому доступен xml-документ (например, http://info.drweb.com/export/xml/top/ ). Я читал, что для этого используются специальные xml-парсеры (работают на сервере), например Xalan. Либо, можно использовать для этого браузер пользователя?

    Посоветуйте, как такое преобразование выполняется. :huh:
    Сообщение отредактировано: belochub -
      А чего именно ты хочешь добиться?
      Можно установить у себя на компе Xalan и преобразовывать xml-документы по любому линку (xsl-файл может находиться как на твоей машине, так и удаленно). Используя, опять же, Xalan можно написать сервлет, который на стороне сервера будет осуществлять преобразования по запросу броузера.
      А можно и апплет сделать, который будет выполенять преобразования (тоже использую классы Xalan'а)
        Цитата silentium @
        А чего именно ты хочешь добиться?


        Желательно, конечно, чтоб браузер клиента выполнял такое преобразование. Но если такого нельзя, то придется преобразовывать на сервере. Насчет сервлета - с жабой не сильно дружу. Однако, нашел инфу - можно на delphi написать cgi-приложение, используя класс DOMDocument (юзает MSXML Parser 3.0). Какой вариант посчитаете лучшим?
          Цитата belochub @
          Желательно, конечно, чтоб браузер клиента выполнял такое преобразование
          Тогда попробуй загрузку и обработку XML документа в сценариях через методы объектов DOM. Правда, в таком случае, клиенту придется загружать и xml-документ, и xsl.
          ExpandedWrap disabled
            <html>
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
            <script language="JavaScript"><!--      
                var source; // Входящий документ
                var stylesheet; // Преобразование
                var result; // Результат
             
                function init(){
                    // Инициализируем ссылку на объект входящего документа
                    source = document.getElementById("source");
                    // Загружаем входящий документ (может находиться в любом месте)
                    source.load("http://info.drweb.com/export/xml/top/")
                    // Инициализируем ссылку на объект преобразования
                    stylesheet = document.getElementById("stylesheet");
                    // Загружаем документ преобразования (может находиться в любом месте)
                    stylesheet.load("http://silentium.pochta.ru/1.xsl");        
                    // Получаем элемент, в который мы будем выводить результат обработки
                    result = document.getElementById("result");
                }
                    
                function transform(){
                    strResult = source.transformNode(stylesheet);
                    result.innerHTML = strResult;
                }//-->
            </script>
            </head>
             
            <body onload="init();">
            <!-- Объек - входящий документ -->
            <object id="source" width="0" height="0" classid="clsid:f5078f32-c551-11d3-89b9-0000f81fe221">
              <param name="async" value="true">
              <param name="validateOnParse" value="true">
            </object>
            <!-- Объект - документ преобразования -->
            <object id="stylesheet" width="0" height="0" classid="clsid:f5078f32-c551-11d3-89b9-0000f81fe221">
              <param name="async" value="false">
              <param name="validateOnParse" value="false">
            </object>
            <a href="javascript:transform()">XSLT-transform</a>
            <div id="result"/>
            </body>
            </html>
            Тупо скопировал в html-файл. Открываю firefox'ом - жму на ссылку - ничего не происходит. Explorer'ом - выдает ошибку на строке
            ExpandedWrap disabled
              strResult = source.transformNode(stylesheet);

            Типа, stylesheet неправильный :'(
              Цитата belochub @
              Explorer'ом - выдает ошибку
              У меня IE ошибки не кидает. Пропиши тогда путь к локальному xsl'ю, чтоб проверить.
                Если перейти к локальному xsl'ю, выдает буквально следующее:
                ExpandedWrap disabled
                  Топ- на (h.)

                Если еще и к локальному xml'ю - все ок - строит таблицу.
                В том и в другом случае firefox молчит. :blink:
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0365 ]   [ 15 queries used ]   [ Generated: 28.04.24, 06:06 GMT ]