【发布时间】:2014-09-25 16:13:32
【问题描述】:
我正在将 XML 代码转换为 Java Map。 XML 将大量随机单词与一个数字(概率分布)进行匹配,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<Durapipe type="int">1</Durapipe>
<EXPLAIN type="int">2</EXPLAIN>
<woods type="int">2</woods>
<hanging type="int">3</hanging>
<hastily type="int">2</hastily>
<localized type="int">1</localized>
.......
</root>
我正在尝试使用 XStream 来实现这一点。这是我的主程序当前使用的 Java 代码:
XStream xstream = new XStream();
Map<String, Integer> englishCorpusProbDist;
xstream.registerConverter(new MapEntryConverter());
englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new File("C:/Users/David Naber/Documents/IREP Project/frequencies.xml"));
这是我的 MapEntryConverterClass:
public class MapEntryConverter implements Converter {
public boolean canConvert(Class clazz) {
return Map.class.isAssignableFrom(clazz);
}
public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
Map<String, Integer> map = (Map<String, Integer>) value;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
writer.startNode(entry.getKey().toString());
writer.setValue(entry.getValue().toString());
writer.endNode();
}
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
Map<String, Integer> map = new HashMap<String, Integer>();
while (reader.hasMoreChildren()) {
reader.moveDown();
map.put(reader.getNodeName(), reader.getValue());
reader.moveUp();
}
return map;
}
}
我在上面的函数中遇到了一个错误,在“map.put(reader.getNodeName(), reader.getValue());”这一行。错误说:“方法 put(String, Integer)类型 Map 中的参数不适用于参数 (String, String)。”
所以我真的有两个问题。首先,为什么会发生这个错误,我该如何解决?其次,我还需要实现什么才能最终让 XStream 将其转换为 XML?
非常感谢任何帮助。提前谢谢!
【问题讨论】: