Вот такой вот примерчик:
Есть необходимость поставить пробел ( ) в JSP (jspx) странице. Для этого, разумеется, нежно определить ENTITY, но следующий пример не работает:
org.apache.jasper.JasperException: /layout/test.jspx(5,103) Element type "jsp:root" must be declared.
<?xml version="1.0"?>
<!DOCTYPE jsp:root [><!ENTITY nbsp " ">]>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"; xmlns="http://www.w3.org/1999/xhtml"; version="1.2"> <jsp:directive.page contentType="text/html"/> <jsp:output doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"; doctype-root-element="html" omit-xml-declaration="true"/> <html> <head><title>Simple jspx page</title></head> <body> </body> </html> </jsp:root>
Т.е. в определении DTD нужно указывать ВСЕ элементы которые присутствуют в документе. Поиски в гугле выдают пару ссылок на архивы переписок, где такая же проблема увы осталась без решения.
Пробовал даже так писать:
<!DOCTYPE jsp:root [ <!ELEMENT jsp:root ANY> <!ENTITY nbsp " ">]>
где ANY якобы допускает любые вложенные теги, но все тщетно.
Самое интересное что в дотнете, при работе с XSLT, подобное работало без проблем, тоесть я писал:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE stylesheet SYSTEM "../xhtml-lat1.ent"> <!-- в xhtml-lat1.ent определены только ENTITY's без каких либо элементов -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">; ...
Забавно также то, что здесь не нужно указывать префикса xsl:stylesheet и парсер отрабатывает просто stylesheet.
Потратил 2 дня на решение проблемы но так и не нашел ответа. Сервер — SUN JSAS 8.1