将XML转换为Java Map< String,Integer>与XStream [英] Converting XML to Java Map<String, Integer> with XStream

查看:590
本文介绍了将XML转换为Java Map< String,Integer>与XStream的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用XStream将XML转换为Java Map。每次我解决一个问题,我遇到了另一个问题。令人难以置信的令人沮丧无论如何,XML看起来像这样:

 <?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&lt; String,Integer&gt;与XStream的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆