Как снять тег версии XML в библиотеке XOM для Java?

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

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

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

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

Изменить: я выводить в файл с использованием класса Serializer XOM

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

Illegal processing instruction target (found xml)

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

3 ответа

Решение

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

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


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

"Пример документа 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 ...?> пометить это жалуется.

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

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

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

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

Вам, вероятно, придется переопределить ваш сериализатор, чтобы сделать его доступным для решения этой проблемы. Я предлагаю переопределить 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.

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

Защищенный void writeXMLDeclaration() выбрасывает IOException

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

Договорились, что вы должны нормально вывести пролог

Другие вопросы по тегам