XML直列化器

XML直列化器

仕様書

[2] >>1 では DocumentElement子孫直列化が規定されています。 >>4 では各種 Node直列化が規定されています。

誤り処理

[3] >>1名前空間整形式にならない場合例外を投げると規定しています。また適宜名前空間fixup を行うよう指示しています。 >>4 でも例外は投げられますが名前空間fixup はされないことがあります。

[5] Chrome はそれなりに名前空間fixup を行なっているようです。しかし正しく直列化できない場合であっても例外は投げないようです。

[6] HTMLの直列化との整合性を考慮するなら、例外は投げないで無理に直列化する方が一貫した動作ではあります。 もちろんその場合再度構文解析しても元には戻りませんが。

名前空間 fixup

[7] Chrome XML文書での innerHTML 取得の時、

[8] Firefox XML文書での innerHTML 取得の時、

  1. 元の名前空間接頭辞が有効ならそのまま使います。
  2. そうでなければ同じ名前空間URLで最後に宣言された名前空間接頭辞があれば使います。
  3. 要素名前空間接頭辞宣言されていなければ、最初に追加の属性として名前空間宣言が出力されます。
  4. 属性名前空間接頭辞が無いか宣言されていなければ、 a0a1、... と順に割り振られた名前空間接頭辞が使われます。属性の直後に追加の属性として名前空間宣言が出力されます。

文字参照

[9] ChromeinnerHTML は、 属性値中の<&>"文字参照にします。 それ以外の U+00A0C0C1サロゲート非文字はそのままにします。

[10] つまり C0 が含まれると整形式になりません。

[11] Serialize non-well-formed documents too (annevk著, ) <https://github.com/whatwg/xhr/commit/59c9cd9ae31fc8fafd1c327f2d2a1ca1e88da28f>

[12] XSLT and XQuery Serialization 3.1 () <https://www.w3.org/TR/2017/REC-xslt-xquery-serialization-31-20170321/#xml-output>