2

オブジェクトのリストをシリアル化するために Xstream を使用しています。( Task オブジェクトのリスト)。

XML を jsp ページに戻しています。

HashMap<String, Object> m = new HashMap<String, Object>();
XStream xstream = new XStream();
xstream.alias("Task", Task.class);
xstream.alias("Tasks", Vector.class);
m.put("task", task);
m.put("xml", xstream.toXML(l));

return new ModelAndView("task", m);

最終的な XML 構造は次のようになります。

<Tasks>
 <Task>
    <TaskId>1<TaskId>
    <TaskName>Task 1</TaskName>
    etc...
 </Task>    

のルート ノードはベクターとして返されます。上記のように、xtream を使用してそれを「タスク」にエイリアスしています。

新しいタスクを作成するとき、またはタスクを更新するときに、タスクの順序や番号付けなどを再配置するコードがあるため、Task オブジェクトの完全なリストを返します。しかし、XML 構造のルート ノードの属性として作成/更新した単一の TaskId の値を保存したいので、ネットワークを介して 2 つの呼び出しを行う必要がなく、クライアント コードがアクセスできます。データベース内の新規/更新された Task 行の ID。

たとえば、新しいタスクを作成し、TaskId 5 が割り当てられている場合、次のようにルート ノードにタスク ID を保存します。

<Tasks myId="5">
<Task>
    <TaskId>1</TaskId>
    <TaskName>Task 1</TaskName>
</Task>
<Task>
    <TaskId>2</TaskId>
    <TaskName>Task 2</TaskName>
</Task>
...
<Task>
    <TaskId>5</TaskId>
    <TaskName>Task 5</TaskName>
</Task>
etc

Xstream でこれを達成するにはどうすればよいですか? XML 出力を変換するには、XSLT ファイルを使用する必要がありますか? これを達成するための最良の方法は何ですか?

4

1 に答える 1

1

これを行うには、タスク用のコンバーターを作成し、マーシャルメソッドで次のように属性フィールドを設定します。

writer.addAttribute( "mydtl"、tasks.get(2).getTaskName());

コンバーターの作成については、次のリンクを参照してください。

http://x-stream.github.io/converter-tutorial.html

于 2012-10-23T09:08:52.817 に答える