А у меня такая проблемка: генерирую xml-ку для дальнейшего использования во флешке. Одно из полей должно содержать html-разметку (в частности, <p>, <br>, <font> и т.д.). Структура xml примитивна
<?xml version="1.0"?>
<root>
<now>
<name attr="Название"/>
<html attr="Текст, содержащий тэги"/>
</now>
</root>
Выгружаю информацию из базы следующим образом:
PHP:
$dom = domxml_new_doc("1.0");
$root = $dom->append_child($dom->create_element("root"));
$res = $Ctrl->GetItems();
if ($res)
foreach($res as $t)
{
$news = $root->append_child($dom->create_element("now"));
$node = $news->append_child($dom->create_element("name"));
$node->set_attribute("attr", iconv("ISO-8859-1", "utf-8", $t->name));
$node = $news->append_child($dom->create_element("html"));
$node->set_attribute("attr", iconv("ISO-8859-1", "utf-8", $t->text));
}
$dom->dump_file($config["xml"]."now.xml", false, true);
При этом все теги заменяются на HTML сущности. Можно ли это как-то обойти, не заморачивась с XSLT-преобразованием (причина банальна: разбираться с ним времени нет, да и не уверен, будет ли его поддержка на хостинге).
Версия PHP 4.3.6
-~{}~ 25.11.05 08:54:
Пришлось таки начать разбираться
![Smile :) :)](/talk/styles/default/xenforo/smilies/smile.png)
С поддержкой XSLT разобрался, на хостинге все есть. Теперь осталось разобраться с самим xslt-преобразованием. Вот что у меня получилось в результате чтения FAQ и форум:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl
![Eek! :eek: :eek:](/talk/styles/default/xenforo/smilies/eek.png)
utput method="xml" encoding="utf-8" indent="no"/>
<xsl:template match="now">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="now()">
<xsl:value-of select="html" disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
Предполашалась следующая логика: если это не тег now, то выводим as is, иначе для тега html в теге now объявляем DOE=yes. Но вот только что-то не работает оно... Подскажите, где ошибаюсь? Заранее, сенк
-~{}~ 25.11.05 15:35:
Покопался еще в xslt, почитал форум, FAQ и detail... Понял, что писал фигню
![Smile :) :)](/talk/styles/default/xenforo/smilies/smile.png)
Не исключено, что и сейчас пишу фигню...
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl
![Eek! :eek: :eek:](/talk/styles/default/xenforo/smilies/eek.png)
utput method="xml" />
<xsl:template match="/">
<root>
<xsl:apply-templates select="now"/>
</root>
</xsl:template>
<xsl:template match="now" />
<now>
<xsl:apply-templates select="name"/>
<xsl:apply-templates select="html"/>
</now>
<xsl:template match="name">
<xsl:value-of select="name" disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="html">
<xsl:value-of select="html" disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
Теперь проблема в том, что ругается:
Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token)
Warning: xslt_error(): supplied argument is not a valid XSLT Processor resource
Конечный файл пытаюсь получить следующим образом:
PHP:
$xslt = xslt_create();
$ret = xslt_process($xslt, $config["xml"]."now.xml", $config["xml"]."now.xsl", $config["xml"]."now1.xml");
$config["xml"]."now.xml" - файл, подготовленный с помощью domxml (писал выше код)
$config["xml"]."now.xsl" - нарисовал ручками, текст привел чуть выше
Sablotron ставил так, как описано в факе (под win32). phpinfo() говорит, что все enable и работает...