知らぬ間に勧告されていた。動的な操作に伴う検証を扱うようだけれど、それよりLoad and Saveを早く勧告してほしい。良く分からんけど変更が無いことを期待しつつフライングしてしてしまおうか。というわけでじっくり読んでみる。
「Save」するには、DOMImplementationLS.createLSSerializer()
でシリアライザを作成し、LSSerializer.write(nodeArg, destination)
または LSSerializer.writeToURI(nodeArg, uri)
。 LSSerializer.writeToString(nodeArg)
なら「Save」せずにDOMString(UTF-16)が返ってくる。nodeArgパラメタにはNodeを指定できる。ということはDocumentFragmentも指定できるが、この時はchildNodesが順番通りに書き出されるだけなので、結果はwell-formed XMLにはならない。destinationパラメタはLSOutputインターフェイスを持ったオブジェクトでなければならず、しかもそのアトリビュートによってwriteメソッドの挙動が変わる。
出力先は次のアトリビュートの順で優先される:
LSOutput.characterStream
LSOutput.byteStream
LSOutput.systemId
UTF-8なXML文書を操作した後<file:///D|/temp/temp.xml>にShift_JISで保存しようと思ったら:
out = DOMImplementationLS.createLSOutput() out.encoding = 'Shift_JIS' out.systemId = 'file:///D|/temp/temp.xml' ser = DOMImplementationLS.createLSSerializer() ser.write(Document, out)
実際にはfileプロトコルのシンタクスが環境依存なのでその辺りを云々。DOMImplementationLSの取得はLoad and Save実装を謳っているモジュールのgetDOMImplementationぽい名前のメソッドとか何とかを使うとかその辺? これは必然的に実装依存だと思われた。
因みに「Load」に関してはシンプルだから特にメモする必要なし。