Как снять тег версии XML в библиотеке XOM для Java? - PullRequest
0 голосов
/ 30 апреля 2011

Я пишу небольшое приложение на Java, которое использует XOM для вывода XHTML.

Проблема в том, что XOM помещает следующий тег перед всем HTML:

<?xml version="1.0" encoding="UTF-8"?>

I 'Я прочитал их документацию, но я не могу найти, как удалить этот тег.Спасибо, ребята.

Редактировать: Я вывожу в файл, используя класс сериализатора XOM

Продолжение: Если это хорошая практика использованиятег XML перед DOCTYPE, почему его не используют никакие веб-сайты?Кроме того, почему валидатор W3C выдает мне сообщение об ошибке, когда видит тег XML?Вот ошибка:

Illegal processing instruction target (found xml)

Наконец, если бы я поместил тег XML перед моим DOCTYPE, значит ли это, что мне не нужно указыватьв моем HTML-заголовке?

Ответы [ 3 ]

3 голосов
/ 30 апреля 2011

Тег действителен как XML и XHTML, а хорошая практика .Там не должно быть никаких причин, чтобы удалить его.

Просто оставьте это там ... или исправьте все, что ожидает, что его там не будет.


Если вы мне не верите, посмотрите на этот отрывокиз XHTML 1.1 spec .

"Пример документа XHTML 1.1

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 <html version="-//W3C//DTD XHTML 1.1//EN"
       xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/1999/xhtml
                      http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"
 >
   <head>
     <title>Virtual Library</title>
   </head>
   <body>
     <p>Moved to <a href="http://example.org/">example.org</a>.</p>
   </body>
 </html>

Обратите внимание, что в этом примереДекларация XML включена. Декларация XML, подобная приведенной выше, не требуется во всех документах XML. Авторам документов XHTML СЛЕДУЕТ использовать декларации XML во всех своих документах. Авторы документов XHTML ДОЛЖНЫ использовать декларации XML, если кодировка символов документа отличается отпротокол по умолчанию UTF-8 или UTF-16, и кодировка более высокого уровня не указывается. "


Кстати, служба проверки W3C говорит, что все в порядке ... ноесли есть пробел перед тегом <?xml ...?>, он жалуется.

3 голосов
/ 30 апреля 2011

Предполагая, что вы хотите использовать свой XHTML в качестве text/html типа контента, вы вправе удалить декларацию XML, потому что если вы этого не сделаете, IE6 перейдет в режим причуд.

Переопределение writeXMLDeclaration(), как предлагает MJB, выглядит хорошим способом сделать это.

Но вы должны знать, что вы можете решить другие проблемы, используя XML-сериализатор и передавая результат как text/html.

Скорее всего, в результате будет получен тег, подобный следующему: <script src="myscript.js" />. Браузеры (кроме Safari) не будут воспринимать это как тег самозакрывающегося скрипта, а как тег начала скрипта, и все последующее будет рассматриваться как часть скрипта и не будет отображаться браузером.

Вам, вероятно, потребуется переопределить ваш сериализатор, чтобы сделать его доступным для разрешения HTML. Я предлагаю переопределить функцию writeEmptyElementTag(), и для всех элементов с именами , а не в списке "area", "base", "basefont", "bgsound", "br", "col", "command", "embed", "frame", "hr", "isindex", "image", "img", "input", "keygen", "link", "meta", "param", "source", "spacer" and "wbr", вызовите writeStartTag(), а затем writeEndTag() вместо поведения по умолчанию.

Наконец, если бы я поместил тег XML до моего DOCTYPE, это значит, что я не нужно указывать <meta charset="UTF-8" /> в моем HTML-заголовке?

Нет, это не так. При использовании в качестве text/html объявление XML просто игнорируется браузерами, поэтому вам все равно придется предоставлять кодировку символов другими способами, либо метатегом, либо в заголовках HTTP.

3 голосов
/ 30 апреля 2011

Это работает?Это указано в Javadoc

защищенный void writeXMLDeclaration () throws IOException

Вы можете переопределить его и ничего не делать .....

Согласились, что вы должны обычно выводитьпролог

...