【发布时间】:2011-08-28 08:41:32
【问题描述】:
我有一个复杂的 XML,我需要从中构建 java 对象。 我使用 Unmarshal 来做这件事。 虽然这项工作很完美,但我还需要将 Java 对象打印为字符串。 我有两个解决方案:
- 为每个嵌套类实现 toString() 方法。 -> 这很好用
- 执行元帅。 -> 这里有错误。
我有这个 XML:
<Lang>
<a1 NAM="Momo" RTA="" />
<a2 NAM="Rena" RTA="buba" />
<a3 NAM="Fiba" RTA="kusit" />
<a4 NAM="Shila" RTA="hamuda" />
<Lang>
我需要生成 java 对象的地图表示。
Map - Key 是本例中的第一个属性 a1,a2,a3...
Map - value 是其余的属性 - 为此我实现了具有属性 NAM 和 RTA 的类,类名为 BBB。
在这个类中,我构建了一个具有 1 个参数 - 元素的构造函数。
我从 Unmarshall 方法调用这个构造函数
我现在不知道地图中值的数量。
我现在不知道属性的名称 - a1 , a2 .. 需要是通用的
所以,我为正确解组所做的工作是:
我构建了一个包含元素列表 (org.w3c.dom.Element) 的类 - 带有 @XmlAnyElement 注释。 类名是ABC
-
我建立了一个类来扩展 XmlAdapter{ABC, MAP{String,BBB}}
并实现了 Unmarshall 方法,而不是实现 Marshall 方法
这很好用,我得到的数据完全符合我的预期。 现在我想实现 Marshal 方法,但不确定是否要这样做,因为 element 不是常规对象 - 它是一个接口。
元帅法:
@Override
public LangVos marshal(Map<String, BBB> map) {
ABC abc = new ABC();
langVos.langVOs = new ArrayList<Element>(map.size());
for (Entry<String, BBB> entry : map.entrySet()) {
Element e = (Element) entry.getValue(); // how to create Element using factory from entry ?
ABC.list.add(e);
}
return abc;
}
我现在不知道如何在 marshall 中设置属性。 在解组时,我需要执行 getAttribute。
我希望我说的很清楚。
感谢您的帮助。
鲍里斯。
【问题讨论】:
标签: java jaxb marshalling element