Консультация № 59787
22.10.2006, 16:12
0.00 руб.
0 1 1
Помогите начинающему юзеру. Есть база данных - файл xml, файл xsl, информация о продукции выводится index.php (все в приложении). Все работает нормально, не могу вывести секции CDATA в таблицы, выводится как текст. Долго разбирался с обработкой и переопределением шаблонов обработки - ничего не получилось. Не хотелось бы использовать парсер.

Приложение:
Файл index.php<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title>ООО ‘Тепловые системы - сервис‘, г.Пермь</title><script language="JavaScript">var source;var style;<!-- Функция инициализации необходимых объектов -->function init() {<!-- Создаем объект для файла - источника данных. -->source = new ActiveXObject("Microsoft.XMLDOM");source.async = false;<!-- Создаем объект для файла с шаблоном преобразования (для файла стиля). -->style = new ActiveXObject("Microsoft.XMLDOM");style.async = false;<!-- Загружаем записи в файл - источник данных -->source.load("xml/nasten.xml");<!-- Загружаем файл стиля -->style.load("xml/nasten.xsl");<!-- вывести информацию на экран -->document.all.item("content").innerHTML = source.transformNode(style);return true;}</script></head ><body onLoad="init()">...<div id="content"><!-- Здесь HTML-содержимое --></div>...Файл данных nasten.xml<?xml version="1.0" encoding="Windows-1251" ?><?xml-stylesheet type="text/xsl" href="nasten.xsl" ?><products caption="Газовые настенные котлы"><!-- начало описания группы Leopard --><group caption="Leopard" manuf="Protherm, Чехия"><desc><![CDATA[<li>плавная модуляция мощности,</li><li>нагрев отопительной и горячей воды в битермическом теплообменнике,</li><li>искровое зажигание,</li><li>автоматическая диагностика,</li><li>эквитермическое регулирование,</li> <li>защита от замерзания,</li><li>все элементы безопасности,</li> <li>кнопочное управление,</li><li>встроенный циркуляционный насос и расширительный бачок</li><LI>возможность работы на сжиженном газе</LI>]]></desc><pict><![CDATA[<img src="images/leopard.jpg" width="157" height="239">]]></pict><manual><![CDATA[<a href="files/protherm/24BTVBOV.pdf" target="_self">См. инструкцию на котел</a>]]></manual><!-- начало описания котла --><product><model>Leopard 24 BOV</model><param1>23</param1><param2>8,5</param2><param3>90</param3><param4>100</param4><param5>80</param5><param6>12,5</param6><param7>дымоход</param7><weight>32</weight><a>410</a><b>320</b><h>740</h></product><group><products>Файл nasten.xsl<?xml version="1.0" encoding="WINDOWS-1251"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="*|/"><!-- Выводим название страницы --><h2><xsl:value-of select="//products/@caption"/></h2><!-- Перебираем все серии --><table border="0" width="100%" cellpadding="10"> <xsl:for-each select="products/group"> <!-- сортируем сначала по производителю --> <xsl:sort select="@manuf"/> <!-- затем по названию серии --> <xsl:sort select="@caption"/> <tr> <!-- вывод названий серии --> <td width="20%" class="model_manuf"><h3><xsl:value-of select="@caption"/></h3></td> <!-- вывод названия производителя серии --> <td width="80%" class="model_manuf"><h4>Производитель - <xsl:value-of select="@manuf"/></h4></td> </tr> <tr> <!-- вот здесь и проблема --> <!-- вывод картинки и ссылки на мануал--> <td width="25%" class="pict"><xsl:value-of select="pict"/><xsl:value-of select="manual"/></td> <!-- вывод описания серии --> <td width="75%" class="desc"><xsl:value-of select="desc"/><p/> <!-- вывод шапки таблицы для вывода всех параметров продукта в таблицу --> <table border="0" cellpadding="3"> <tr> <td rowspan="2" class="productparam">Модель</td> <td colspan="2" class="productparam">Мощность, Квт</td> <td rowspan="2" class="productparam">КПД, %</td> <td rowspan="2" class="productparam">Отвод продуктов сгорания</td> <td rowspan="2" class="productparam">Потребляемая электрическая мощность, Вт</td> <td rowspan="2" class="productparam">Макс. температура ОВ, град</td> <td rowspan="2" class="productparam">Расход ГВС, л/мин</td> <td rowspan="2" class="productparam">Вес, кг</td> <td colspan="3" class="productparam">Размеры, мм</td> </tr> <tr> <td class="productsubparam">мин</td> <td class="productsubparam">макс</td> <td class="productsubparam">a</td> <td class="productsubparam">b</td> <td class="productsubparam">h</td> </tr> <!-- вывод всех значений параметров продукта --> <xsl:for-each select="product"> <tr> <td class="productmodel"><xsl:value-of select="model"/></td> <td class="productvalue"><xsl:value-of select="param2"/></td> <td class="productvalue"><xsl:value-of select="param1"/></td> <td class="productvalue"><xsl:value-of select="param3"/></td> <td class="productvalue"><xsl:value-of select="param7"/></td> <td class="productvalue"><xsl:value-of select="param4"/></td> <td class="productvalue"><xsl:value-of select="param5"/></td> <td class="productvalue"><xsl:value-of select="param6"/></td> <td class="productvalue"><xsl:value-of select="weight"/></td> <td class="productvalue"><xsl:value-of select="a"/></td> <td class="productvalue"><xsl:value-of select="b"/></td> <td class="productvalue"><xsl:value-of select="h"/></td> </tr> </xsl:for-each> </table> </td> </tr> </xsl:for-each></table></xsl:template></xsl:stylesheet>

Обсуждение

Неизвестный
23.10.2006, 10:34
общий
это ответ
Здравствуйте, 1!
Измените свой xsl:
добавьте аттрибут disable-output-escaping="yes" к элементам
<xsl:value-of select="pict"/>
<xsl:value-of select="manual"/>
<xsl:value-of select="desc"/>
получится
<xsl:value-of disable-output-escaping="yes" select="pict"/>
<xsl:value-of disable-output-escaping="yes" select="manual"/>
<xsl:value-of disable-output-escaping="yes" select="desc"/>

Удачи.

Приложение:
<?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"/> <xsl:template match="*|/"> <!-- Выводим название страницы --> <h2> <xsl:value-of select="//products/@caption"/> </h2> <!-- Перебираем все серии --> <table border="0" width="100%" cellpadding="10"> <xsl:for-each select="products/group"> <!-- сортируем сначала по производителю --> <xsl:sort select="@manuf"/> <!-- затем по названию серии --> <xsl:sort select="@caption"/> <tr> <!-- вывод названий серии --> <td width="20%" class="model_manuf"> <h3> <xsl:value-of select="@caption"/> </h3> </td> <!-- вывод названия производителя серии --> <td width="80%" class="model_manuf"> <h4> Производитель - <xsl:value-of select="@manuf"/> </h4> </td> </tr> <tr> <!-- вот здесь и проблема --> <!-- вывод картинки и ссылки на мануал--> <td width="25%" class="pict"> <xsl:value-of disable-output-escaping="yes" select="pict"/> <xsl:value-of disable-output-escaping="yes" select="manual"/> </td> <!-- вывод описания серии --> <td width="75%" class="desc"> <xsl:value-of disable-output-escaping="yes" select="desc"/> <p/> <!-- вывод шапки таблицы для вывода всех параметров продукта в таблицу --> <table border="0" cellpadding="3"> <tr> <td rowspan="2" class="productparam">Модель</td> <td colspan="2" class="productparam">Мощность, Квт</td> <td rowspan="2" class="productparam">КПД, %</td> <td rowspan="2" class="productparam">Отвод продуктов сгорания</td> <td rowspan="2" class="productparam">Потребляемая электрическая мощность, Вт</td> <td rowspan="2" class="productparam">Макс. температура ОВ, град</td> <td rowspan="2" class="productparam">Расход ГВС, л/мин</td> <td rowspan="2" class="productparam">Вес, кг</td> <td colspan="3" class="productparam">Размеры, мм</td> </tr> <tr> <td class="productsubparam">мин</td> <td class="productsubparam">макс</td> <td class="productsubparam">a</td> <td class="productsubparam">b</td> <td class="productsubparam">h</td> </tr> <!-- вывод всех значений параметров продукта --> <xsl:for-each select="product"> <tr> <td class="productmodel"> <xsl:value-of select="model"/> </td> <td class="productvalue"> <xsl:value-of select="param2"/> </td> <td class="productvalue"> <xsl:value-of select="param1"/> </td> <td class="productvalue"> <xsl:value-of select="param3"/> </td> <td class="productvalue"> <xsl:value-of select="param7"/> </td> <td class="productvalue"> <xsl:value-of select="param4"/> </td> <td class="productvalue"> <xsl:value-of select="param5"/> </td> <td class="productvalue"> <xsl:value-of select="param6"/> </td> <td class="productvalue"> <xsl:value-of select="weight"/> </td> <td class="productvalue"> <xsl:value-of select="a"/> </td> <td class="productvalue"> <xsl:value-of select="b"/> </td> <td class="productvalue"> <xsl:value-of select="h"/> </td> </tr> </xsl:for-each> </table> </td> </tr> </xsl:for-each> </table> </xsl:template></xsl:stylesheet>
Форма ответа