3

XML ドキュメントを JSON に変換するために net.sf.json.xml.XMLSerializer を使用しています。ほぼ 2 つの類似した XML ドキュメントに対して、2 つの異なる結果が得られます。私のコードは次のとおりです。

public static void main(String[] args) throws DocumentException {
    String t1="<A><B>aa</B><C><D>Martin Ritt</D> </C></A>";
    String t2="<A><B>aa</B><C><D>Martin Ritt</D></C></A>";
    System.out.println(new XMLSerializer().read(t1).toString());
    System.out.println(new XMLSerializer().read(t2).toString());
}

最初の文字列 t1 は次のように変換されます。

{"B":"aa","C":["Martin Ritt"]}

t2 は次のように変換されます。

{"B":"aa","C":{"D":"Martin Ritt"}}

つまり、最初のケースでは C は配列と見なされ、2 番目のケースではオブジェクトと見なされます。2 つの XML の違いは、D 要素を閉じた後のスペースです。つまり、 の後</D>

ここで何が起こっているのか分かりますか?ルールは何ですか?配列を一貫して認識させる方法にもっと興味があります。

4

1 に答える 1

0

ルールは次のとおりです。

  • この場合、ルート ノードは破棄されます。<A>
  • テキストノードの子を持つ要素ノード =>

    {"Element":"text node"}
    
  • 要素の子を持つ要素ノード =>

    {"Element":{"Element":"text node"} } //t1
    
  • 子が混在する要素ノード (要素 + 空白) =>

    {"Element":["text node"]} //t2
    

参考文献

于 2015-06-13T00:08:36.950 に答える