Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Некорректное отображение содержимого узлов


Автор: ICEMAN3141592 17.1.2012, 08:55
Здравствуйте, у меня тут магия. Вообщем, с помощью бибилотеки на сервер приходят данные в xml виде, далее с помощью XSLT-парсера переводятся в "кашку" html, css, javascript и отсылаются браузеру. Кашку варил не я, но я должен исправить следующий косяк. На локальном сервере у меня все нормально оторбражается, а на тестовом нет. Один файл, один код, НО отображается по разному (все смотрю в Mozilla Firefox)

Вот xsl - файл.
Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output  method="html" version="4.0" encoding="UTF-16" />
<xsl:template  match="/">
  <script language="JavaScript">
  <xsl:text disable-output-escaping="yes">
  </xsl:text>
  </script>        
<xsl:apply-templates/>
</xsl:template>
        
<xsl:template match="folder">
  <table border="0" width="100%" cellpadding="1" cellspacing="0">
  <tr style='cursor:default'  onClick="ToggleDisplay(cls{@id},img{@id})" id="up{@id}"  onmouseover="this.style.cursor='hand'; this.style.background='#F0F3FE';" onmouseout="this.style.cursor='hand'; this.style.background='#FFFFFF';" valign="top">
  <td style="border-width:0">
    <xsl:value-of  disable-output-escaping="yes" select="concat( '&lt;img border=&quot;0&quot; name=&quot;img',@id,'&quot; src=&quot;../images/plus.gif&quot; align=&quot;absmiddle&quot; width=&quot;11&quot;&gt;&lt;/img&gt; ')"/>
  </td>
  <td style="border-width:0">
    <xsl:value-of  disable-output-escaping="yes" select="concat( '&lt;img border=&quot;0&quot; name=&quot;img',@id,'f&quot; src=&quot;../images/mis_task_folder.gif&quot; align=&quot;absmiddle&quot; &gt;&lt;/img&gt; ')"/>
  </td>
  <td style="border-width:0" width="100%">
    <xsl:value-of  disable-output-escaping="yes" select="concat( '&lt;b&gt;&lt;a id=&quot;',@id,'&quot; name=&quot;',@name ,'&quot; onclick=&quot;clickIt(this)&quot;  target=&quot;repdet&quot;   href=&quot;cgi.exe?function=db_gocbrep&amp;action=2&amp;rep=',@id,'&quot;  style=&quot;font-size:11px&quot; &gt;',child::title,'&lt;/a&gt;&lt;/b&gt;')"/>
  </td>
  </tr>
  <tr style="DISPLAY:none"  id="cls{@id}">
  <td style="border-width:0"></td>
  <td style="border-width:0" colspan="2"><xsl:apply-templates/>    </td>
  </tr>
</table>
</xsl:template>
<xsl:template match="report">    
  <div  onmouseover="this.style.cursor='hand'; this.style.background='#F0F3FE';" onmouseout="this.style.cursor='hand'; this.style.background='#FFFFFF';">
  <xsl:value-of  disable-output-escaping="yes" select="concat( '&lt;table border=&quot;0&quot;cellspacing=&quot;1&quot; cellpadding=&quot;0&quot;&gt;&lt;tr valign=&quot;top&quot; id=&quot;@id&quot;&gt;&lt;td style=&quot;border-width:0&quot;&gt;&lt;img src=&quot;../images/transp.gif&quot; border=&quot;0&quot; width=&quot;14&quot;/&gt;&lt;/td&gt;&lt;td style=&quot;border-width:0&quot;&gt;&lt;img name=&quot;img',@id,'t&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;../images/tree_report.gif&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td  style=&quot;border-width:0&quot; width=&quot;100%&quot;&gt;&lt;a id=&quot;',@name,'&quot; name=&quot;',@id,'&quot; onclick=&quot;clickIt(this)&quot;  target=&quot;repdet&quot; href=&quot;cgi.exe?function=db_gocbrep&amp;action=1&amp;rep=',@id,'&quot; style=&quot;font-size:11px&quot;&gt;',child::title,'&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td/&gt;&lt;td/&gt;&lt;td bgcolor=&quot;#DDDDDD&quot; style=&quot;border-width:0&quot;&gt;&lt;img src=&quot;../images/transp.gif&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot;/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;')"/>
  </div>
</xsl:template>
<xsl:template match="title">        
</xsl:template>
<xsl:template match="comment">        
</xsl:template>
<xsl:template match="run_method"/>
</xsl:stylesheet>



Проблемы с тегом/узлом "folder".

Вот входной xml-файл

Код

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<report_tree>
    <folder id="20298" name="REPNODE298">
        <title>Сервиса</title>
        <report id="336369165" name="BILLSUM">
            <title>Результаты биллинга</title>
        </report>
        <report id="596019487" name="DEALAPPS">
            <title>Приложения обслуживания по дилерам</title>
        </report>
        <report id="764480048" name="REJ_REP">
            <title>Клиенты в исключении</title>
        </report>
        <report id="767288890" name="SERVHEND">
            <title>Услуги с ценами, отличными от тарифа</title>
        </report>
        <report id="767632457" name="AB_INFO">
            <title>Сводная информация об абоненте/абонентском номере</title>
        </report>
        <report id="933834031" name="APN">
            <title>Отчет о параметрах APN</title>
        </report>
        <report id="1070970211" name="NOTES">
            <title>Замечания</title>
        </report>
        <folder id="1353319363" name="DEMO">
            <title>Папка для роликов</title>
        </folder>
        <report id="1608999811" name="DBTCOM">
            <title>Протокол работы по лицевому счету.</title>
        </report>
        <report id="1901962463" name="VOICEINF">
            <title>Статистика по заявкам</title>
        </report>
        <report id="2129130168" name="PROG_SIM">
            <title>Соответствие абонентских номеров SIM-картам</title>
        </report>
    </folder>
    <folder id="20299" name="REPNODE299">
        <title>Система сервиса</title>
        <reportcboss id="51710" name="VMNHOUR">
            <title>* Ср. кол-во обращений к АССА за сутки</title>
        </reportcboss>
        <report id="954872821" name="VMNMENU">
            <title>Статистика по типам обращений</title>
        </report>
    </folder>
    <folder id="20300" name="REPNODE300">
        <title>Отчеты ЦОД</title>
        <reportcboss id="53216" name="RO_STAT2">
            <title>Исходящая телефония с разбивкой по зонам</title>
        </reportcboss>
        <report id="1967897479" name="ROAM_OWN">
            <title>Отчет по обмену файлами</title>
        </report>
    </folder>
</report_tree>


Пробовал изменять кодировки, но толку нету, тем более странно, что на локальном все нормально, а на тестовом - нет.
Входной xml-файл имеет коидровку "utf-8", 
XSL-файл имеет кодировку "windows-1251", выходной его данные в формате "UTF-16", а сама страница имеет charset = "windows-1251".

Что более того странно, что "Папка для роликов отображается нормально  smile  И простые узлы тоже.

Вот изображение на тестовом сервере в браузере
http://www.imageup.ru/img189/reporterrortest864380.jpg.html

Изображение на локальном сервере в браузере
http://www.imageup.ru/img189/reportcorrectlocal864381.jpg.html

Автор: ICEMAN3141592 17.1.2012, 15:51
Народ, ну хотя бы гипотезы  smile 
А то уже 25 просмотров и ниодной версии

Автор: magelan 17.1.2012, 16:04
утф-16 вам зачем? умышленно зарезаете возможность использовать ajax?
почти у всех парсеров проблемы c шестнадцатой, для начала поставте утф-8.
и вообще разберитесь с вашим "зоопарком" кодировок, давно пора все в утф-8 и забыть о проблемах с кривыми значками.

Автор: ICEMAN3141592 18.1.2012, 12:02
Исправил все на windows-1251, проблема осталась, как в принципе я и ожидал, т.к. если бы проблема, возможно, была в кодировке, то на локальной машине проблема была та же, но как видно, ее на лок. машине нету.

Автор: diadiavova 18.1.2012, 14:18
Цитата(ICEMAN3141592 @  18.1.2012,  13:02 Найти цитируемый пост)
Исправил все на windows-1251, проблема осталась, как в принципе я и ожидал, т.к. если бы проблема, возможно, была в кодировке, то на локальной машине проблема была та же, но как видно, ее на лок. машине нету. 

А что именно ты исправил? Одно дело, если исправлена кодировка, указанная в документе, и совсем другое - кодировка, с которой документ сохраняется. Ну и сервер может в заголовках указывать совсем другую кодировку, так что тут видимо информации для диагностики проблемы недостаточно.

Автор: ICEMAN3141592 19.1.2012, 19:00
Цитата(diadiavova @  18.1.2012,  14:18 Найти цитируемый пост)
Одно дело, если исправлена кодировка, указанная в документе, и совсем другое - кодировка, с которой документ сохраняется.


xsl - файл перевел в windows-1251 в Notepad++ (а encoding в windows-1251 там уже стоит), и вместо UTF-16 поставил windows-1251, в котором отображается страница в браузере.

Цитата(diadiavova @  18.1.2012,  14:18 Найти цитируемый пост)
Ну и сервер может в заголовках указывать совсем другую кодировку, так что тут видимо информации для диагностики проблемы недостаточно. 

Я тоже об этом думал, но код один и тот же, я изменил на локальном, сразу же код перенес на тестовый. Причем когда я перевел все файлы в windows-1251, на локальном ничего не изменилось, как отображал так и отображает, на тестовом все также...как не отображает, так и не отображает.

Может быть это с настройками тестового компьютера ?
Самое интересное, что как видно из скриншота, "Папка для роликов" отображается нормально, просто магия.

Автор: diadiavova 19.1.2012, 21:24
ICEMAN3141592, вообще, меня несколько смущает, что ты формируешь элементы не обычным для хсл способом(то есть непосредственной вставкой в документ выходных элементов), а делаешь это при помощи элемента value-of и конкатенации строки. Скорей всего проблема кроется где-то в этих местах, иногда разные процессоры могут обрабатывать документы по разному и если серверное по отличается от того, на котором все это дело тестировалось, то оно может эти вещи как-то иначе обрабатывать. Не очень понятно для чего вообще был такой способ выбран.

Автор: ICEMAN3141592 24.1.2012, 09:35
Цитата(diadiavova @  19.1.2012,  21:24 Найти цитируемый пост)
меня несколько смущает, что ты формируешь элементы не обычным для хсл способом(то есть непосредственной вставкой в документ выходных элементов), а делаешь это при помощи элемента value-of и конкатенации строки. 

Извините, мой опыт с xslt очень скуп, Вы не могли показать, как правильно писать в xslt данный пример ?

Автор: diadiavova 24.1.2012, 13:49
ICEMAN3141592, ну я все не буду делать( само собой), но на одном примере покажу. Вот возьмем одну строчку такого вида(22 строка кода в твоем примере).
Код

    <xsl:value-of  
        disable-output-escaping="yes" 
        select="concat( 
                    '&lt;b&gt;&lt;a id=&quot;',
                    @id,
                    '&quot; name=&quot;'
                    ,@name, 
                    '&quot; onclick=&quot;clickIt(this)&quot;  target=&quot;repdet&quot;   href=&quot;cgi.exe?function=db_gocbrep&amp;action=2&amp;rep=',
                    @id,
                    '&quot;  style=&quot;font-size:11px&quot; &gt;',
                    child::title,
                    '&lt;/a&gt;&lt;/b&gt;')"/>

Вместо этого должно быть примерно следующее
Код

<b>
  <a style="font-size: 11px" 
       id="{@id}" 
       name="{@name}" 
       onclick="clickIt(this)" 
       target="repdet" 
       href="{concat('cgi.exe?function=db_gocbrep&amp;action=2&amp;rep=' , @id)}">
    <xsl:value-of select="title" />
  </a>
</b>


Автор: ICEMAN3141592 24.1.2012, 16:39
Ага, т.е. для остальных 3ех случаев сделать тоже самое ?

Автор: ICEMAN3141592 24.1.2012, 17:28
Цитата(irinazanuda @  24.1.2012,  16:41 Найти цитируемый пост)
ну я все не буду делать( само собой

О, спасибо. Не увидел. Прочитал между строк smile

diadiavova, и правда, огромное спасибо ! 
 smile smile smile smile smile smile smile smile smile smile smile smile smile smile smile smile smile smile 

Мне просто 1 задача стоит, вроде все работает на локальном, а тестовый выделывается. Думал, что ради одной, по идеи, мелочной задачи прошариваться по-крупному в xslt не решился, все-таки есть же профи в этом деле smile
Не лентяй, просто хрень какая-то творится между разными машинами с одним и тем же кодом.

P.S. irinazanuda, а вы не жена diadiavova ? А то слышится, какой - то странный звук пилы...

Автор: diadiavova 24.1.2012, 21:51

 ! 
diadiavova
irinazanuda, здесь не флейм и не песочница и за флуд очень даже запросто можешь получить читательский билет. Чтоб это было в последний раз, а то ты меня знаешь.

Цитата(ICEMAN3141592 @  24.1.2012,  17:39 Найти цитируемый пост)
Ага, т.е. для остальных 3ех случаев сделать тоже самое ? 

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)