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"
true
true
に設定すると、「format-pretty-print」、「discard-default-content」、「xml-declaration」の各パラメータがfalse
に設定されます。これらのパラメータのいずれかをtrue
に設定すると、このパラメータがfalse
に設定されます。「canonical-form」がtrue
であるときにXML 1.1文書を直列化すると、致命的エラーが生成します。 false
"discard-default-content"
true
Attr.specified
属性を使用して、どのような属性を破棄するべきかを決定します。このパラメータがtrue
に設定されている場合、一部の実装では、どのような属性およびコンテンツを破棄するかを決定するために、その実装で使用できるあらゆる情報(つまり、XMLスキーマ、DTD、Attr.specified
属性など)を使用する可能性があります。 false
"format-pretty-print"
true
false
"ignore-unknown-character-denormalizations"
true
"unknown-character-denormalization"
警告を発生させ(このパラメータが設定されていない場合は、代わりにエラーを発生させる)、これらの文字によって引き起こされる可能性のある不完全な正規化をすべて無視します。 false
"normalize-characters"
DOMConfiguration
で定義されているパラメータと同等です。コアの場合とは異なり、このパラメータのデフォルト値はtrue
です。DOM実装では、「XML 1.1」の付録Eに従って文書内の文字の完全な正規化をサポートする必要はありませんが、サポートする場合は、デフォルトでこのパラメータをアクティブにする必要があります。 "xml-declaration"
true
Document
、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, 2014, Oracle and/or its affiliates. All rights reserved.