По поводу CDATA, порой встречается достаточно объемные куски кода, заключенные в вышеупомянутые <![CDATA[ код ]]>, имхо это делает код менее читаемым. Можно вставить в самом начале документа (после <xsl:stylesheet ...>), такую конструкцию:
<xsl:output method="[xml][html][svg]" ... cdata-section-elements="tag"/>, где tag, все, что Вы не хотите анализировать, например script style br и т.д.
Предложение интересное. Однако, в данном случае в CDATA заключается материалы модулей: статьи, новости и сообщения форумов. Мне при, чтении XML-кода, нужно лишь знать где контент, а где XML-код документа. С CDATA это сделать проще, т.к. большинство редакторов XML (или поддерживающих синтаксис) блок CDATA выделяют, т.ч. его легко найти.
Весь контент у меня в CMS редактируется через WYSIWYG-редактор и храниться в базе. При формировании XML-документа я блоки этого контента (ели я знаю, что они могут содержать пользовательское форматирование) помещаю в CDATA.
В PHP есть отличная функция DomDocument->loadHTML($htmlString), которая лишает многих головных болей. Она легко справится с <br/> и <br> и закроет незакрытые теги. Она же конвертирует HTML в валидный XHTML который вы сможете хранить в XML-документе без CDATA (в CDATA попудут только участки CSS, JS и т.п.).
Так же можно будет вырезать все опасные для дизайна и пользователей участки: class, style, script и, как следствие, повысить безопасность…
Я пользовался подобными решениями (не в PHP), однако, от них пришлось отказаться, т.к.:
- пришлось иногда вставлять Flash, баннеры и другой специфический контент.
- вырезание кода часто упирается в человеческий фактор: пользователь может ввести такое форматирование, которое сложно очистить
- больше гемора.
Вполне возможно подобрать хороший «ви-зи-виг»-редактор, который бы не генерировал мусор, а так же выдавал XHTML или XML.
Всё включать в CDATA не очень хорошо.
Своей CMS-кой. Было нужно только пару раз:
- сверстать код с типографикой
- залить на сервер все в статике, т.к. MySQL временно глючил, а клиенту нужно было все срочно показывать.
Я пользуюсь для XSL notepad++, а для работы с кодом CMS HomeSite. Я бы с удовольствием оставил один HomeSite, но последний плохо работает в кодировке UTF-8.
Я конечно понимаю, что "К сожалению, дальше пришлось отказаться от использования браузера для компиляции XSLT."
Но disable-output-escaping в FireFox не поддерживается.
Решение у меня уже есть, но оно полностью не протестировано и не внедрено. Как только - так сразу наверно и сюда выложу.
Практический XSLT. Использование в качестве шаблонизатора. Часть 2