Я преобразовываю XML в карту Java с помощью XStream. Каждый раз, когда я решаю одну проблему, я сталкиваюсь с другой. Невероятно разочаровывает. В любом случае, 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>
<Schuster type="int">5</Schuster>
....
</root>
Java в моем основном, что я использую для реализации, выглядит следующим образом:
XStream xstream = new XStream();
Map<String, Integer> englishCorpusProbDist;
xstream.registerConverter(new MapEntryConverter());
englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new File("locationOnMyComputer/frequencies.xml"));
Класс MapEntryConverter, который я создал, выглядит так:
public class MapEntryConverter implements Converter {
public class java {
}
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(), new Integer(reader.getValue()));
reader.moveUp();
}
return map;
}
}
На данный момент я получаю следующее исключение: "Исключение в потоке" main "com.thoughtworks.xstream.mapper.CannotResolveClassException: root".
Может ли кто-нибудь объяснить, почему это так и как я могу это исправить?
Этот вопрос казался, что он может иметь ответ, но я думаю, что мы используем разные реализации: com.thoughtworks.xstream.mapper.CannotResolveClassException
Любая помощь будет принята с благодарностью. Заранее спасибо!
Попробуй это:
XStream xstream = new XStream(new DomDriver());
xstream.alias("root", Map.class);
Map<String, Integer> englishCorpusProbDist;
xstream.registerConverter(new MapEntryConverter());
englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new FileInputStream(new File("locationOnMyComputer/frequencies.xml")));