2011-12-08 11 views
1

は、私がこれを書いている場合Canonical XML SpecJAXBとXML列聖

に従ってJAXBによって非整列化私のXMLをcanonizeしたいですか?

もしそうでなければ、JAXBはその仕事をすることができますか?

答えて

3

はに基づいて私の最初の答えです:http://www.w3.org/TR/2001/REC-xml-c14n-20010315#Terminology

1 - 文書はUTF-8エンコーディングにデフォルトJAXBマーシャリングではUTF-8

でエンコードされています。

2 - ラインので、これは実際には適用されません。改行は保持されません

JAXBを解析する前に、入力上の#xAへ正規化壊れます。

3 - 有効プロセッサ

によってあなたはJAXB実装用に検証プロセッサを持っているUnmarshallerXmlSchemaを指定することができるかのように属性値は、正規化されている:

4-文字とパースされたエンティティの参照が置換されます

ほとんどのJAXB実装では、この作業を使用される基礎となるパーサに委譲します。

5 CDATAセクションは、文字コンテンツ

標準JAXB APIはあなたがCDATAセクションにマーシャリングすることはできませんに置き換えているので、あなたはここでOKです。

6 - XML宣言と文書型定義(DTD)は、JAXBはDTD宣言を書き込むない

除去されます。空の要素は、開始終了タグのペア

としてJAXBが空の要素を書き込みません

開始終了タグに変換されます -

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 

7:あなたは、以下のようにして、XML宣言を削除することができますペア。このための回避策を考え出すことができるはずです。

8 - 文書要素および開始タグと終了タグ内の空白の外側には、正規化され

9 - 文字コンテンツのすべての空白が保持され

(改行の正規化中に除去文字を除きます) JAXBの実装では、文字コンテンツのすべての空白が保持されます(開始タグと要素タグの間)。

10 - 属性値の区切り文字は、基準とMOXY JAXB実装は、属性値の区切りのための二重引用符を使用して引用符(二重引用符)

に設定されています。

11 - 属性値と文字コンテンツ内の特殊文字は文字に置き換えられますが、

を参照するJAXBは"

12と&amp;&&lt;<、および"を交換します - 余分な名前空間宣言が各要素から削除されました

JAXBの実装は余分な名前空間宣言を記述しないように最善を尽くしますが、追加の名前空間が宣言されていないことを保証することはできません。この問題に対処するための回避策がいくつかあります。

13 - デフォルト属性は、各要素に追加され

TBD

14 - 辞書式順序は、各要素の名前空間宣言と属性

JAXBに課されます実装は各要素の名前空間宣言と属性の順序付けを保証しません。

+1

感謝:)のために : 7 - 空の要素は、タグのペア をエンド開始するために変換されて、私は空のオブジェクトのJAXB書き込みを作成する場合、それは私が – Baptiste

+0

は最終的に私は、ライブラリを見つけたと思う大丈夫ます。http://santuario.apache .orgはw3cに従って標準化を提供しています – Baptiste

-1

いいえ、私の意見では、私はJAXB_FORMATTED_OUTPUTのプロパティに依存しませんでした。言及した仕様の例を使ってテストすることができます。以下は