Xstream - 向根节点添加属性

时间:2012-10-16 16:15:19

标签: xstream

我正在使用Xstream序列化对象列表。 (任务对象列表)。

我将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>    

作为Vector返回的根节点,我使用xtream将其替换为“任务”,如上所示。

当我创建新任务或更新任务时,我有代码重新排列任务的顺序,编号等等,所以我将返回完整的Task对象列表。但我想将我刚刚创建/更新的单个TaskId的值存储为XML结构的根节点中的属性,因此我不必通过网络进行2次调用,而我的客户端代码可以访问数据库中新的/更新的任务行的ID。

因此,例如,如果我创建了一个新任务并且它被分配了一个5的TaskId,我希望将任务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实现这一目标?我是否需要使用XSLT文件来转换XML输出?实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以通过编写任务转换器并在编组方法中设置属性字段来完成此操作,

  

writer.addAttribute( “mydtl”,tasks.get(2).getTaskName());

请参阅以下链接以创建转换器

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