【问题标题】:Xstream - adding an attribute to the root nodeXstream - 向根节点添加属性
【发布时间】:2012-10-16 16:15:18
【问题描述】:

我正在使用 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 次调用,并且我的客户端代码可以访问db 中新的/更新的 Task 行的 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 输出?实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: xstream


    【解决方案1】:

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

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

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

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

    【讨论】: