XML и сущности

fog

Рыцарь Джедай
XML и сущности

Есть у меня XML файл, который я преобразовываю в HTML страницу.
Текстовые данные для содержимого этого XML документа лежат в отдельном файле/берутся из базы.
Эти файлы заполняет пользователь, представляют они из себя text/HTML

Я безу эти файлы и добавляю их в мой XML документ, например:

<root>
<content> ...сюда добавляется содержимое файла...</content>
</root>

при добавлении, все символы < > & " ' заменяются на сущности, т.е. реально добавляется не

<root>
<content> t<b>e</b>xt </content>
</root>

a

<root>
<content> t&lt;b&gt;e&lt;/b&gt;xt </content>
</root>

соответственно после преобразования, я получаю не то что хотел, не HTML разметку - а скобочки :)

как это победить?

- символы на сущность заменяет sql2xml, которой я пользуюсь
- да и просто так добавлять "как есть" ветку в XML не хочется, так как если юзер ошибётся - XML может стать не well-formed и преобразование не выполниться.

-~{}~ 18.06.04 12:07:

Вернее, вопрос "как поступать в данном случае?"
 

slach

Новичок
идем читаем спецификацию по поводу
CDATA

в DOMXML можно создавать CDATA секции
php4.x даже класс такой вроде есть
DomCData наследник от DomNode

и смотрим ф-цию
DomDocument->create_cdata_section()

-~{}~ 18.06.04 18:03:

http://www.php.net/manual/en/function.domdocument-create-cdata-section.php

-~{}~ 18.06.04 18:04:

также не плохо почитать про disable-output-escaping в спецификации XSLT
 

fog

Рыцарь Джедай
slach Спасибо. Я в общем-то подумал именно о CDATA, хотелось уточнить.
sql2xml, о которой я писал, пока не умеет создавать узлы CDATA. Видимо, придётся к ней что-то дописать :-/
 

slach

Новичок
;) видимо придется

сделать что то вроде наследника...
и переписать логику

какое нибудь свойство добавить, чтобы указать какие именно поля должны быть cdata...
 

fog

Рыцарь Джедай
Да, так как она в стадии 0.3 бета, там много чего нет :(
методом add() с параметром SQL Query string - вообще лучше не пользоваться :(
К тому же правило PEAR о том, что ошибки не должны печататься там где происходят - не соблюдается. В некоторых случаях - работа заканчивается print, die;
И вообще, замечательная тема - метод addArray при передаче не-ассоциативного массива генерирует не well-formed XML, типа

<?xml version="1.0"?>
<root>
<result>
<0>apple</0>
<1>orange</1>
<2>pear</2>
</result>
</root>

и не сообщает об ошибке. Может воспользоваться их баг треккером? :)

Кстати, в данном конкретном случае, всё действительно обошлось disable-output-escaping. Спасибо ещё раз за наводку.

-~{}~ 18.06.04 17:43:

Да, и ещё, что не приятно - при добавлении нового рекордсета нельзя сразу задать имя XML-тега для него, тоже пришлось в наследнике дописать, через SetOptions (к стати, getOptions тоже нету :)
 
Сверху