public interface LSSerializer
LSSerializerは、DOM文書をXMLに直列化する(書き込む)ためのAPIを提供します。 XMLデータは文字列または出力ストリームに書き込まれます。 直列化を実行する間にどのような変更や修正が行われても、影響があるのは直列化されたデータだけです。 Documentオブジェクトとその子が直列化操作によって変更されることはありません。
「DOM Level 3 Core」、付録Bで定義されているように、XMLデータの直列化中に名前空間修正が行われます。「DOM Level 2 Core」では、実際の名前空間URIとして空の文字列が許可されます。 NodeのnamespaceURIが空の文字列である場合、直列化ではそれをnullとして処理し、接頭辞(存在する場合)を無視します。
LSSerializerは、直列化のために任意のノード型を受け入れます。 DocumentまたはEntity型のノードの場合は、可能であれば整形式のXMLが作成されます(文書またはエンティティが解析操作から得られ、作成されてから変更されていない場合は整形式が保証されます)。 これらのノード型の直列化出力は、それぞれXML文書または外部XMLエンティティとして出力され、XMLパーサーの受け入れ可能な入力となります。 ほかのすべてのノード型の直列化された形式は、実装によって決まります。
直列化されるDocument、DocumentFragment、またはEntity内では、Nodesは次のように処理されます。
falseに設定されてないかぎり)とDTDサブセット(DOM内に存在する場合)を含め、Documentノードが書き込まれます。 Documentノードを書き込むと、文書全体が直列化されます。
LSSerializer.writeによって直接書き込まれた場合、Entityノードはエンティティ拡張を出力しますが、名前空間修正は行われません。 結果として得られる出力は外部エンティティとして有効になります。
trueに設定されている場合、EntityReferenceノードは、出力で「&entityName;」形式のエンティティ参照として直列化されます。 エンティティ参照の子ノード(展開)は無視されます。 「entities」パラメータがfalseに設定されている場合は、エンティティ参照の子のみが直列化されます。 子を持たないEntityReferenceノード(対応するEntityノードがないか、または対応するEntityノードに子がない場合)は、常に直列化されます。
CDATAsectionsは、「split-cdata-sections」パラメータに従って処理されます。 このパラメータがtrueに設定されている場合は、CDATAsectionsが分割され、表現できない文字は通常のコンテンツ内の数値文字参照として直列化されます。 正確な位置と分割数は指定されません。 このパラメータがfalseに設定されている場合、CDATAsection内の表現できない文字は、「well-formed」パラメータがtrueに設定されている場合の"wf-invalid-character"エラーとして報告されます。 代替文字が提供されず、直列化が続行されるのでエラーは回復できません。
DocumentFragmentノードは、文書フラグメントの子を文書フラグメント内に現れる順序で直列化することによって直列化されます。
ノート: Nodeを直列化しても、必ずしも整形式のXML文書を生成しません。つまり、結果として得られる直列化の解析時に、LSParserによって致命的エラーがスローされる可能性があります。
文書(マークアップの範囲外)の文字データ内では、直接表すことができないすべての文字は、文字参照に置き換えられます。 「<」や「&」が現れると、事前定義済エンティティである<や&に置き換えられます。 その他の事前定義済エンティティ(>、'および")は、必要な場合(たとえば、「]]>」などで> を使用している場合)を除き、使用されない可能性があります。 出力文字エンコーディングで直接表すことができないすべての文字は、数値参照として直列化されます。文字エンコーディング標準では、一般に文字の16進表現を使用するので、文字参照を直列化するとき、16進表現を使用することをお薦めします。
属性値に単一引用符と二重引用符の両方を含めることを可能にするために、アポストロフィまたは単一引用符文字(')を「'」として、また二重引用符文字(")を「"」として表すことができます。 出力文字エンコーディングの属性値で直接表せない改行文字やほかの文字は、数値参照として直列化されます。
出力文字エンコーディングで表せない文字が、マークアップ内ではあるが、属性の外部に現れた場合は、すべて致命的エラーDOMErrorとして報告されます。 たとえば、encoding="us-ascii"で<LaCa�ada/>要素を直列化する例があります。 この結果、DOMError「wf-invalid-character-in-node-name」が生成されます(「well-formed」で提示されている)。
LSSerializerで「normalize-characters」パラメータをtrueに設定することによって要求された場合、文字の正規化は、直列化されるすべてのデータ(マークアップと文字データの両方)に対して、「XML 1.1」の付録Eに含まれている完全に正規化された文字の定義に従って実行されます。 文字の正規化処理は、書込み中のデータのみに影響を与えます。直列化の完了後、処理により文書のDOMのビューが変化することはありません。
実装では、「UTF-8」、「UTF-16」、「UTF-16BE」、および「UTF-16LE」エンコーディングをサポートして、すべてのXMLパーサーによってサポートされる必要があるすべてのエンコーディングで、データが直列化されることを保証する必要があります。 エンコーディングがUTF-8の場合、バイト順序記号が直列化されるかどうか、または出力がビッグ・エンディアンかリトル・エンディアンのどちらなのかは、実装に依存します。 エンコーディングがUTF-16である場合、出力がビッグ・エンディアンまたはリトル・エンディアンのどちらになるかは実装に依存しますが、LSOutput.byteStreamやLSOutput.systemIdなどの非文字出力に対してバイト順序記号が生成されます。 バイト順序記号が生成されない場合、警告「byte-order-mark-needed」が報告されます。 エンコーディングがUTF-16BEまたはUTF-16LEの場合、出力はビッグ・エンディアン(UTF-16BE)またはリトル・エンディアン(UTF-16LE)で、バイト順序記号は生成されません。 いずれの場合も、エンコーディング宣言(生成される場合)は直列化中に使用されるエンコーディングに対応します(たとえば、UTF-16が要求された場合はencoding="UTF-16"が表示されます)。
名前空間は直列化中に修正され、直列化処理では名前空間宣言、名前空間接頭辞、および要素と属性に関連付けられた名前空間URIが一貫していることが確認されます。 矛盾が検出された場合、文書の直列化された形式は変更され、矛盾を削除します。 文書の直列化中に名前空間修正の実行に使用されるメソッドは、「DOM Level 3 Core」の付録B.1「名前空間の正規化」で定義されているアルゴリズムです。
文書を直列化中に、指定以外のデータが直列化されるかどうかは「discard-default-content」パラメータにより制御されます。
直列化中、エラーと警告は、エラー・ハンドラ(LSSerializer.domConfigの「error-handler」パラメータ)経由でアプリケーションに報告されます。 この仕様では、DOMノードを直列化中に発生する可能性があるすべてのエラーと警告は定義されていませんが、一般的なエラーと警告のケースの一部を定義しています。 この仕様で定義されているエラーと警告の種類(DOMError.type)は次のとおりです。
"no-output-specified" [fatal]LSOutputへの書込み中に、LSOutputで出力が指定されていない場合に返されます。 "unbound-prefix-in-entity-reference" [fatal] trueに設定されていて、バインドされていない名前空間接頭辞が置換テキストに含まれているエンティティが、名前空間接頭辞のバインディングがない位置で参照された場合に返されます。 "unsupported-encoding" [fatal]定義済みのエラーや警告を返すのに加えて、実装では、IOエラー(「ファイルが見つかりません、アクセス権は拒否されました...」)などを招くほかのエラーや警告について実装固有のエラーを返します。
「Document Object Model (DOM) Level 3 Load and Save Specification」も参照してください。
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
DOMConfiguration |
getDomConfig() |
DOMノードの直列化中に
LSSerializerが使用するDOMConfigurationオブジェクト。 |
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) |
エンコーディングを指定せず、
LSOutput.systemIdをuri引数に設定して、LSOutputでLSSerializer.writeが呼び出されたかのように機能する簡易メソッドです。 |
DOMConfiguration getDomConfig()
LSSerializerが使用するDOMConfigurationオブジェクト。 LSSerializerのDOMConfigurationオブジェクトは次のパラメータを追加または変更します。
"canonical-form"truetrueに設定すると、「format-pretty-print」、「discard-default-content」、「xml-declaration」の各パラメータがfalseに設定されます。 これらのパラメータのいずれかをtrueに設定すると、このパラメータがfalseに設定されます。 「canonical-form」がtrueであるときにXML 1.1文書を直列化すると、致命的エラーが生成します。 false"discard-default-content"trueAttr.specified属性を使用して、どのような属性を破棄するべきかを決定します。 このパラメータがtrueに設定されている場合、一部の実装では、どのような属性およびコンテンツを破棄するかを決定するために、その実装で使用できるあらゆる情報(つまり、XMLスキーマ、DTD、Attr.specified属性など)を使用する可能性があります。 false"format-pretty-print"truefalse"ignore-unknown-character-denormalizations" true"unknown-character-denormalization"警告を発生させ(このパラメータが設定されていない場合は、代わりにエラーを発生させる)、これらの文字によって引き起こされる可能性のある不完全な正規化をすべて無視します。 false"normalize-characters"DOMConfigurationで定義されているパラメータと同等です。 コアの場合とは異なり、このパラメータのデフォルト値はtrueです。 DOM実装では、「XML 1.1」の付録Eに従って文書内の文字の完全な正規化をサポートする必要はありませんが、サポートする場合は、デフォルトでこのパラメータをアクティブにする必要があります。 "xml-declaration"trueDocument、Element、またはEntityノードが直列化される場合は、XML宣言またはテキスト宣言を含めるようにしてください。 バージョン(文書がレベル3文書であり、バージョンがnull以外の場合はDocument.xmlVersion、それ以外の場合は値「1.0」を使用する)および出力エンコーディング(出力エンコーディングを検索する方法の詳細は、LSSerializer.writeを参照)は、直列化されたXML宣言で指定されます。 false"xml-declaration-needed"警告を報告します。 String getNewLine()
nullに設定すると、その値はデフォルト値にリセットされます。void setNewLine(String newLine)
nullに設定すると、その値はデフォルト値にリセットされます。LSSerializerFilter getFilter()
DOMConfigurationパラメータにより要求された操作が適用されたあとに呼び出されます。 たとえば、CDATAセクションは、「cdata-sections」がfalseに設定されるとフィルタに渡されません。 void setFilter(LSSerializerFilter filter)
DOMConfigurationパラメータにより要求された操作が適用されたあとに呼び出されます。 たとえば、CDATAセクションは、「cdata-sections」がfalseに設定されるとフィルタに渡されません。 boolean write(Node nodeArg, LSOutput destination) throws LSException
LSSerializerインタフェースの一般的な説明で、前述のように指定されたノードを直列化します。 出力は、指定されたLSOutputに書き込まれます。 LSOutputへの書込み時、エンコーディングは、LSOutputおよび書き込まれる項目(または、その所有者文書)を通して到達できるエンコーディング情報を次の順序で検索することによって見つけられます。
LSOutput.encoding,
Document.inputEncoding,
Document.xmlEncoding.
LSOutputで出力が指定されていない場合は、致命的エラー「no-output-specified」が返されます。 nodeArg - 直列化するノード。destination - 直列化されたDOMの宛先。nodeが正常に直列化された場合はtrueを返します。 通常の処理は停止したが、実装が文書の直列化を引き続き実行している場合はfalseを返します。この場合、直列化の結果は実装に依存します。 LSException - SERIALIZE_ERR: LSSerializerがノードを直列化できなかった場合に発生します。 エラーに関する詳細を取得する場合、DOMアプリケーションは「error-handler」パラメータを使用してDOMErrorHandlerを接続する必要があります。 boolean writeToURI(Node nodeArg, String uri) throws LSException
LSOutput.systemIdをuri引数に設定して、LSOutputでLSSerializer.writeが呼び出されたかのように機能する簡易メソッドです。nodeArg - 直列化するノード。uri - 書込み先のURI。nodeが正常に直列化された場合はtrueを返します。 通常の処理は停止したが、実装が文書の直列化を引き続き実行している場合はfalseを返します。この場合、直列化の結果は実装に依存します。 LSException - SERIALIZE_ERR: LSSerializerがノードを直列化できなかった場合に発生します。 エラーに関する詳細を取得する場合、DOMアプリケーションは「error-handler」パラメータを使用してDOMErrorHandlerを接続する必要があります。 String writeToString(Node nodeArg) throws DOMException, LSException
LSSerializerインタフェースの一般的な説明で、前述のように指定されたノードを直列化します。 出力は、呼出し側に返されるDOMStringに書き込まれます。 使用されるエンコーディングは、DOMString型のエンコーディング、つまりUTF-16です。 DOMStringオブジェクトでは、バイト順序記号が生成されません。 nodeArg - 直列化するノード。DOMException - DOMSTRING_SIZE_ERR: 結果の文字列が長すぎてDOMString内に収まらない場合に発生します。LSException - SERIALIZE_ERR: LSSerializerがノードを直列化できなかった場合に発生します。 エラーに関する詳細を取得する場合、DOMアプリケーションは「error-handler」パラメータを使用してDOMErrorHandlerを接続する必要があります。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。