将XML转换为Java Map< String,Integer>与XStream [英] Converting XML to Java Map<String, Integer> with XStream
问题描述
<?xml version =1.0encoding =UTF-8? >
< root>
< Durapipe type =int> 1< / Durapipe>
< EXPLAIN type =int> 2< / EXPLAIN>
< woods type =int> 2< / woods>
< hang type =int> 3< / hang>
< 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>条目: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();
}
返回地图;
}
}
目前我收到以下异常: 线程中的异常maincom.thoughtworks.xstream.mapper.CannotResolveClassException:root。
任何人都可以解释为什么会这样,我该如何解决这个问题? p>
这个问题似乎可能有答案,但我认为我们正在使用不同的实现: 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)));
I'm converting XML to a Java Map with XStream. Each time I solve one problem, I run into another. Incredibly frustrating. Anyways, the XML looks something like this:
<?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>
The Java in my main that I'm using to implement this looks like this:
XStream xstream = new XStream();
Map<String, Integer> englishCorpusProbDist;
xstream.registerConverter(new MapEntryConverter());
englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new File("locationOnMyComputer/frequencies.xml"));
The MapEntryConverter class that I've created looks like this:
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;
}
}
At the moment I'm getting the following exception: "Exception in thread "main" com.thoughtworks.xstream.mapper.CannotResolveClassException: root".
Can anyone explain why this is and how I could fix this?
This question seemed like it might have the answer, but I think we're using different implementations: com.thoughtworks.xstream.mapper.CannotResolveClassException
Any help would be greatly appreciated. Thanks in advance!
Try this:
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")));
这篇关于将XML转换为Java Map< String,Integer>与XStream的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!