2

我正在使用 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>    

的根节点作为向量返回,我使用 xtream 将其别名为“任务”,如上所示。

当我创建新任务或更新任务时,我有重新排列任务顺序、编号等的代码,因此我返回任务对象的完整列表。但是我想将我刚刚创建/更新的单个 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 输出?实现这一目标的最佳方法是什么?

4

1 回答 1

1

您可以通过为任务编写转换器并在 marshal 方法中设置属性字段来做到这一点,

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

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

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

于 2012-10-23T09:08:52.817 回答