Spec-Zone.ru › OpenJDK 17

Интерфейс 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 может выдать ошибки при парсинге результирующей сериализации.

Внутри текстовых данных документа (вне разметки) любые символы, которые нельзя представить напрямую, заменяются ссылками на символы. Вхождения '<' и '&' заменяются предопределёнными сущностями &lt; и &amp;. Другие предопределённые сущности (&gt;, &apos; и &quot;) могут не использоваться, за исключением случаев необходимости (например, использование &gt; в случаях, таких как ']]>'). Любые символы, которые нельзя представить напрямую в кодировке вывода, сериализуются как числовые ссылки на символы (и поскольку стандарты кодировки символов обычно используют шестнадцатеричные представления символов, рекомендуется использовать шестнадцатеричное представление при сериализации ссылок на символы).

Чтобы разрешить значения атрибутов содержать одинарные и двойные кавычки, символ апострофа (') может быть представлен как "&apos;", а символ двойной кавычки (") как "&quot;". Символы новой строки и другие символы, которые нельзя представить напрямую в значениях атрибутов в кодировке вывода, сериализуются как числовые ссылки на символы.

Внутри разметки, но вне атрибутов, любое вхождение символа, который нельзя представить в кодировке вывода, сообщается как DOMError критическая ошибка. Примером может быть сериализация элемента <LaCañada/> с encoding="us-ascii". Это приведёт к созданию DOMError "wf-invalid-character-in-node-name" (как предложено в "well-formed").

При запросе, установке параметра "normalize-characters" в LSSerializer в значение true, нормализация символов выполняется в соответствии с определением полностью нормализованных символов, включённых в приложение Е [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]
Возникает, если встречается неподдерживаемая кодировка.

Помимо указанных ошибок и предупреждений, ожидается, что реализации будут генерировать специфичные для реализации ошибки и предупреждения для любых других случаев ошибок и предупреждений, таких как ошибки ввода/вывода (файл не найден, нет доступа...) и так далее.

См. также Спецификацию загрузки и сохранения (Load and Save) Объектной модели документа (DOM) уровня 3.

Since:
1.5

Краткое описание методов

Модификатор и тип Метод Описание
DOMConfiguration getDomConfig()
Объект DOMConfiguration, используемый LSSerializer при сериализации узла DOM.
LSSerializerFilter getFilter()
Если приложение предоставляет фильтр, сериализатор обратится к фильтру перед сериализацией каждого узла.
String getNewLine()
Последовательность символов конца строки, используемая в выводимом XML.
void setFilter(LSSerializerFilter filter)
Если приложение предоставляет фильтр, сериализатор обратится к фильтру перед сериализацией каждого узла.
void setNewLine(String newLine)
Последовательность символов конца строки, используемая в выводимом XML.
boolean write(Node nodeArg, LSOutput destination)
Сериализует указанный узел, как описано выше в общем описании интерфейса LSSerializer.
String writeToString(Node nodeArg)
Сериализует указанный узел, как описано выше в общем описании интерфейса LSSerializer.
boolean writeToURI(Node nodeArg, String uri)
Удобный метод, который действует так, как будто 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, вызовет ошибку fatal.
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" (вместо выдачи ошибки, если этот параметр не установлен) и игнорируются все возможные денормализации, вызванные этими символами.
false
[необязательно] Сообщить об ошибке fatal, если встречается символ, для которого процессор не может определить свойства нормализации.
"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()
Последовательность символов конца строки, которая будет использоваться в выводимом XML. Поддерживаются любые строки, но XML обрабатывает только определённые последовательности символов как конец строки (см. раздел 2.11 «Обработка конца строки» в [XML 1.0], если сериализуемое содержимое — XML 1.0, или раздел 2.11 «Обработка конца строки» в [XML 1.1], если сериализуемое содержимое — XML 1.1). Использование других последовательностей символов, чем рекомендуемые, может привести к тому, что документ не будет сериализуем или не будет правильно сформирован).
При получении значение по умолчанию этого атрибута — зависящая от реализации последовательность символов конца строки. Реализации DOM должны выбирать значение по умолчанию, соответствующее общепринятой конвенции для текстовых файлов в используемой среде. Реализации должны выбирать последовательность по умолчанию, соответствующую одной из разрешённых XML 1.0 или XML 1.1, в зависимости от сериализуемого содержимого. Установка этого атрибута в null сбросит его значение до значения по умолчанию.

setNewLine

void setNewLine(String newLine)
Последовательность символов конца строки, которая будет использоваться в выводимом XML. Поддерживаются любые строки, но XML обрабатывает только определённые последовательности символов как конец строки (см. раздел 2.11 «Обработка конца строки» в [XML 1.0], если сериализуемое содержимое — XML 1.0, или раздел 2.11 «Обработка конца строки» в [XML 1.1], если сериализуемое содержимое — XML 1.1). Использование других последовательностей символов, чем рекомендуемые, может привести к тому, что документ не будет сериализуем или не будет правильно сформирован).
При получении значение по умолчанию этого атрибута — зависящая от реализации последовательность символов конца строки. Реализации 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 и записываемый элемент (или его документ-владелец) в указанном порядке:
  1. LSOutput.encoding,
  2. Document.inputEncoding,
  3. Document.xmlEncoding.

Если кодировка не найдена, используется кодировка по умолчанию "UTF-8". Если указанная кодировка не поддерживается, генерируется ошибка "unsupported-encoding".
Если выход не указан в LSOutput, генерируется ошибка "no-output-specified".
Реализация отвечает за ассоциацию соответствующего типа MIME с сериализованными данными.
При записи в HTTP URI выполняется 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, 2021, 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://docs.oracle.com/en/java/javase/17/docs/api/java.xml/org/w3c/dom/ls/LSSerializer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API