Интерфейс LSSerializer
public interface LSSerializer
LSSerializer предоставляет API для сериализации (записи) документа DOM в XML. Данные XML записываются в строку или в поток вывода. Любые изменения или корректировки, внесенные во время сериализации, влияют только на сериализованные данные. Объект Document и его дочерние элементы никогда не изменяются операцией сериализации. Во время сериализации XML-данных выполняется корректировка пространства имён, как определено в [DOM Level 3 Core], Приложение B. [DOM Level 2 Core] допускает пустые строки в качестве реального URI пространства имен. Если namespaceURI Node является пустой строкой, сериализация будет обрабатывать их как null, игнорируя префикс, если таковой имеется.
LSSerializer принимает любой тип узла для сериализации. Для узлов типа Document или Entity, при возможности, будет создан корректный XML (корректность гарантируется, если документ или сущность получены из операции разбора и не изменены с момента создания). Сериализованный вывод для этих типов узлов представляет собой либо XML-документ, либо внешнюю XML-сущность, и является приемлемым вводом для XML-парсера. Для всех других типов узлов сериализованная форма зависит от реализации.
Внутри Document, DocumentFragment или Entity, подлежащих сериализации, Nodes обрабатываются следующим образом
- Узлы
Documentзаписываются, включая объявление XML (если параметр "xml-declaration" не установлен в значениеfalse) и подмножество DTD, если оно существует в DOM. Запись узлаDocumentсериализует весь документ. - Узлы
Entity, когда записываются напрямуюLSSerializer.write, выводит расширение сущности, но корректировка пространства имён не выполняется. Результативный вывод будет корректным как внешняя сущность. - Если параметр "entities" установлен в значение
true, узлыEntityReferenceсериализуются как ссылка на сущность вида "&entityName;" в выводе. Дочерние узлы (расширение) ссылки на сущность игнорируются. Если параметр "entities" установлен в значениеfalse, сериализуются только дочерние узлы ссылки на сущность. УзлыEntityReferenceбез дочерних узлов (без соответствующего узлаEntityили соответствующие узлыEntityбез дочерних узлов) всегда сериализуются. - Узлы
CDATAsections, содержащие символы контента, которые невозможно представить в указанной кодировке вывода, обрабатываются в соответствии с параметром "split-cdata-sections". Если параметр установлен в значениеtrue,CDATAsectionsразделяются, а непредставимые символы сериализуются в виде числовых ссылок на символы в обычном содержимом. Точное расположение и количество разделов не указано. Если параметр установлен в значениеfalse, непредставимые символы вCDATAsectionсообщаются как"wf-invalid-character"ошибки, если параметр "well-formed" установлен в значениеtrue. Ошибка необрабатываема — нет механизма для предоставления альтернативных символов и продолжения сериализации. - Узлы
DocumentFragmentсериализуются путём сериализации дочерних узлов фрагмента документа в порядке их появления во фрагменте документа. - Все другие типы узлов (Element, Text и т.д.) сериализуются в соответствующую XML-форму.
Примечание: Сериализация Node не всегда генерирует корректный XML-документ, т.е. LSParser может генерировать фатальные ошибки при парсинге полученной сериализации.
В текстовом содержимом документа (вне разметки) любые символы, которые нельзя представить непосредственно, заменяются ссылками на символы. Вхождения '<' и '&' заменяются предопределёнными сущностями < и &. Другие предопределённые сущности (>, ' и ") могут не использоваться, за исключением случаев необходимости (например, использование > в таких случаях, как ']]>'). Любые символы, которые нельзя непосредственно представить в кодировке вывода, сериализуются как числовые ссылки на символы (и поскольку стандарты кодировки символов обычно используют шестнадцатеричные представления символов, рекомендуется использовать шестнадцатеричное представление при сериализации ссылок на символы).
Для возможности использования одинарных и двойных кавычек в значениях атрибутов символ апострофа (') может быть представлен как "'", а символ двойной кавычки (") — как """. Символы новой строки и другие символы, которые нельзя непосредственно представить в значениях атрибутов в кодировке вывода, сериализуются как числовые ссылки на символы.
Внутри разметки, но вне атрибутов, любое вхождение символа, который нельзя представить в кодировке вывода, сообщается как фатальная ошибка DOMError. Примером может служить сериализация элемента <LaCañada/> с encoding="us-ascii". Это приведёт к генерации ошибки DOMError "wf-invalid-character-in-node-name" (как предложено в "well-formed").
По запросу путём установки параметра "normalize-characters" на LSSerializer в значение true выполняется нормализация символов в соответствии с определением полностью нормализованных символов, включённых в приложение E [XML 1.1] во всех данных, подлежащих сериализации, как в разметке, так и в текстовом содержимом. Процесс нормализации символов влияет только на данные при их записи; он не изменяет представление документа DOM после завершения сериализации.
Реализации должны поддерживать кодировки "UTF-8", "UTF-16", "UTF-16BE" и "UTF-16LE", чтобы гарантировать, что данные можно сериализовать во всех кодировках, которые должны поддерживаться всеми XML-парсерами. При кодировке UTF-8, сериализация символа порядка байтов, или является ли вывод big-endian или little-endian, зависит от реализации. При кодировке UTF-16, является ли вывод big-endian или little-endian, зависит от реализации, но маркер порядка байтов должен быть сгенерирован для выводов, не являющихся символами, таких как LSOutput.byteStream или LSOutput.systemId. Если маркер порядка байтов не сгенерирован, выдаётся предупреждение "byte-order-mark-needed". При кодировке UTF-16LE или UTF-16BE, вывод представляет собой big-endian (UTF-16BE) или little-endian (UTF-16LE), и маркер порядка байтов не генерируется. Во всех случаях объявление кодировки, если оно сгенерировано, будет соответствовать кодировке, использованной при сериализации (например, encoding="UTF-16" будет отображаться, если была запрошена UTF-16).
Пространства имён корректируются во время сериализации; процесс сериализации проверяет, что объявления пространств имён, префиксы пространств имён и URI пространства имён, связанные с элементами и атрибутами, согласованы. Если обнаружены несоответствия, сериализованная форма документа будет изменена, чтобы устранить их. Метод, используемый для корректировки пространства имён при сериализации документа, — это алгоритм, определённый в Приложении B.1, "Нормализация пространства имён", [DOM Level 3 Core].
При сериализации документа параметр "discard-default-content" управляет тем, сериализуются ли не указанные данные.
Во время сериализации ошибки и предупреждения сообщаются приложению через обработчик ошибок (параметр "error-handler" LSSerializer.domConfig). Данный документ не пытается определить все возможные ошибки и предупреждения, которые могут возникнуть при сериализации узла DOM, но некоторые распространённые случаи ошибок и предупреждений определены. Типы ( DOMError.type) ошибок и предупреждений, определённые в этом спецификации, следующие:
"no-output-specified" [fatal]- Возникает при записи в
LSOutput, если вLSOutputне указан вывод. -
"unbound-prefix-in-entity-reference" [fatal] - Возникает, если параметр конфигурации "namespaces" установлен в значение
trueи к сущности, текст замены которой содержит несвязанные префиксы пространства имён, обращаются в месте, где нет связей для префиксов пространства имён. -
"unsupported-encoding" [fatal] - Возникает при обнаружении неподдерживаемой кодировки.
Помимо поднятия определённых ошибок и предупреждений, предполагается, что реализации будут поднимать специфичные для реализации ошибки и предупреждения для других случаев ошибок и предупреждений, таких как ошибки ввода-вывода (файл не найден, права доступа запрещены и т.д.).
См. также Спецификацию загрузки и сохранения документа (DOM) уровня 3.
- С:
- 1.5
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
DOMConfiguration |
getDomConfig() |
Объект DOMConfiguration, используемый LSSerializer при сериализации узла DOM. |
LSSerializerFilter |
getFilter() |
Если приложение предоставляет фильтр, сериализатор вызовет фильтр перед сериализацией каждого узла. |
String |
getNewLine() |
Последовательность символов конца строки, которая будет использоваться в создаваемом XML. |
void |
setFilter |
Если приложение предоставляет фильтр, сериализатор вызовет фильтр перед сериализацией каждого узла. |
void |
setNewLine |
Последовательность символов конца строки, которая будет использоваться в создаваемом XML. |
boolean |
write |
Сериализует указанный узел, как описано выше в общем описании интерфейса LSSerializer. |
String |
writeToString |
Сериализует указанный узел, как описано выше в общем описании интерфейса LSSerializer. |
boolean |
writeToURI |
Удобный метод, который действует так, как будто LSSerializer.write был вызван с LSOutput без указанного кодирования и LSOutput.systemId был установлен в аргумент uri. |
Подробное описание методов
getDomConfig
DOMConfiguration getDomConfig()
DOMConfiguration, используемый интерфейсом LSSerializer при сериализации узла DOM. В дополнение к параметрам, распознаваемым интерфейсом DOMConfiguration, определённым в [DOM Level 3 Core] , объекты
DOMConfiguration для LSSerializer добавляют или изменяют следующие параметры: "canonical-form"-
true- [необязательно] Записывает документ в соответствии с правилами, определёнными в [Canonical XML]. В дополнение к поведению, описанному в "canonical-form" [DOM Level 3 Core] , установка этого параметра в значение
trueустановит параметры "format-pretty-print", "discard-default-content" и "xml-declaration" вfalse. Установка любого из этих параметров в значениеtrueустановит этот параметр в значениеfalse. Сериализация документа XML 1.1, когда "canonical-form" имеет значениеtrue, вызовет ошибку. false- [обязательно] (по умолчанию) Не канонизировать вывод.
"discard-default-content"-
-
true - [обязательно] (по умолчанию) Используйте атрибут
Attr.specified, чтобы определить, какие атрибуты следует отбросить. Обратите внимание, что некоторые реализации могут использовать имеющуюся информацию (например, схему XML, DTD, атрибутAttr.specifiedи т.д.) для определения атрибутов и содержимого, которые нужно отбросить, если этот параметр установлен в значениеtrue. false- [обязательно]Сохранить все атрибуты и всё содержимое.
-
"format-pretty-print"-
-
true - [необязательно] Форматирование вывода путём добавления пробелов для получения красивого отформатированного, индетифицированного, удобочитаемого формата. Точный вид преобразований не определяется в этом документе. Красивое форматирование изменяет содержимое документа и может повлиять на его валидность; валидирующие реализации должны сохранить валидность.
-
false - [обязательно] (по умолчанию) Не форматировать результат красиво.
-
-
"ignore-unknown-character-denormalizations" -
-
true - [обязательно] (по умолчанию) Если при проверке полной нормализации, когда поддерживается [XML 1.1], встречается символ, для которого невозможно определить свойства нормализации, то выводится предупреждение
"unknown-character-denormalization"(вместо вывода ошибки, если этот параметр не установлен), и игнорируются все возможные денeрмализации, вызванные этими символами. -
false - [необязательно] Вывести сообщение об ошибке, если обнаруживается символ, для которого процессор не может определить свойства нормализации.
-
-
"normalize-characters" - Этот параметр эквивалентен параметру, определенному
DOMConfigurationв [DOM Level 3 Core] . В отличие от Core, значение по умолчанию для этого параметра равноtrue. Хотя реализации DOM не обязаны поддерживать полную нормализацию символов в документе в соответствии с приложением E [XML 1.1], этот параметр должен быть активирован по умолчанию, если поддерживается. -
"xml-declaration" -
true- [обязательно] (по умолчанию) Если сериализуется узел
Document,ElementилиEntity, должна включаться декларация XML или декларация текста. Версия (Document.xmlVersion, если документ является документом уровня 3 и версия не нулевая, иначе используется значение "1.0"), и кодировка вывода (см.LSSerializer.writeдля получения подробностей о поиске кодировки вывода) указаны в сериализованной декларации XML. -
false - [обязательно] Не сериализовать XML и текстовые декларации. Вывести предупреждение
"xml-declaration-needed", если это может вызвать проблемы (т.е. сериализованные данные имеют версию XML, отличную от [XML 1.0], или потребуется кодировка для повторного анализа сериализованных данных).
getNewLine
String getNewLine()
При получении значение этого атрибута — специфичная для реализации последовательность символов конца строки по умолчанию. Реализации DOM должны выбрать значение по умолчанию, соответствующее обычному соглашению для текстовых файлов в используемой среде. Реализации должны выбрать последовательность по умолчанию, соответствующую одной из разрешенных последовательностей в XML 1.0 или XML 1.1 в зависимости от сериализуемого содержимого. Установка этого атрибута в значение
null сбросит его значение до значения по умолчанию. setNewLine
void setNewLine(String newLine)
При получении значение этого атрибута — специфичная для реализации последовательность символов конца строки по умолчанию. Реализации DOM должны выбрать значение по умолчанию, соответствующее обычному соглашению для текстовых файлов в используемой среде. Реализации должны выбрать последовательность по умолчанию, соответствующую одной из разрешенных последовательностей в XML 1.0 или XML 1.1 в зависимости от сериализуемого содержимого. Установка этого атрибута в значение
null сбросит его значение до значения по умолчанию. getFilter
LSSerializerFilter getFilter()
Фильтр вызывается после применения операций, запрошенных параметрами
DOMConfiguration. Например, секции CDATA не будут переданы фильтру, если параметр "cdata-sections" установлен в значение false.setFilter
void setFilter(LSSerializerFilter filter)
Фильтр вызывается после применения операций, запрошенных параметрами
DOMConfiguration. Например, секции CDATA не будут переданы фильтру, если параметр "cdata-sections" установлен в значение false.write
boolean write(Node nodeArg, LSOutput destination) throws LSException
LSSerializer. Вывод записывается в предоставленный объект LSOutput. При записи в
LSOutput, кодировка определяется из информации о кодировке, доступной через LSOutput и записываемый элемент (или его документ-владелец) в данном порядке: -
LSOutput.encoding, -
Document.inputEncoding, -
Document.xmlEncoding.
Если кодировка не доступна через указанные свойства, используется кодировка по умолчанию "UTF-8". Если указанная кодировка не поддерживается, генерируется ошибка "unsupported-encoding".
Если в объекте
LSOutput не указан вывод, генерируется ошибка "no-output-specified". Реализация отвечает за сопоставление соответствующего типа носителя с сериализованными данными.
При записи в URI HTTP выполняется операция HTTP PUT. При записи в другие типы URI механизм записи данных в URI зависит от реализации.
- Параметры:
-
nodeArg- Узел для сериализации. -
destination- Назначение для сериализованного DOM. - Возвращает:
- Возвращает
true, еслиnodeбыл успешно сериализован. Возвращаетfalse, если нормальная обработка остановилась, но реализация продолжила сериализацию документа; результат сериализации зависит от реализации. - Выбрасывает:
-
LSException- SERIALIZE_ERR: Выбрасывается, еслиLSSerializerне удалось сериализовать узел. Приложения DOM должны прикрепить обработчик ошибокDOMErrorHandler, используя параметр "error-handler", если они хотят получить подробную информацию об ошибке.
writeToURI
boolean writeToURI(Node nodeArg, String uri) throws LSException
LSSerializer.write был вызван с LSOutput без указанного кодирования и LSOutput.systemId, установленным в аргумент uri.- Parameters:
-
nodeArg- Узел для сериализации. -
uri- URI для записи. - Returns:
- Возвращает
true, еслиnodeбыл успешно сериализован. Возвращаетfalseв случае, если нормальная обработка была остановлена, но реализация продолжила сериализацию документа; результат сериализации зависит от реализации. - Throws:
-
LSException- SERIALIZE_ERR: Вызывается, еслиLSSerializerне смог сериализовать узел. DOM-приложения должны прикрепитьDOMErrorHandler, используя параметр "обработчик ошибок", если они хотят получить подробности об ошибке.
writeToString
String writeToString(Node nodeArg) throws DOMException, LSException
LSSerializer. Вывод записывается в DOMString, который возвращается вызывающей стороне. Использованное кодирование — кодирование типа DOMString, т.е. UTF-16. Обратите внимание, что метка порядка байтов не генерируется в объекте DOMString.- Parameters:
-
nodeArg- Узел для сериализации. - Returns:
- Возвращает сериализованные данные.
- Throws:
-
DOMException- DOMSTRING_SIZE_ERR: Вызывается, если результирующая строка слишком длинная для размещения вDOMString. -
LSException- SERIALIZE_ERR: Вызывается, еслиLSSerializerне смог сериализовать узел. DOM-приложения должны прикрепитьDOMErrorHandler, используя параметр "обработчик ошибок", если они хотят получить подробности об ошибке.
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.xml/org/w3c/dom/ls/LSSerializer.html