在XStream中使用MapConverter

时间:2014-08-02 15:38:21

标签: java xml xstream

我试图将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>
   <Schuster type="int">5</Schuster>
   <regularize type="int">1</regularize>
   <LASR type="int">1</LASR>
   <LAST type="int">22</LAST>
   <Gelch type="int">2</Gelch>
   <Gelco type="int">26</Gelco>
   .......
</root>

我目前使用的Java代码如下所示:

    XStream xstream = new XStream();        
    Map<String, Integer> englishCorpusProbDist; 
    englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new File("locationonmycomputer/frequencies.xml"));

我得到了一个例外:

Exception in thread "main" com.thoughtworks.xstream.mapper.CannotResolveClassException: root
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79)

有人建议我使用以下内容注册我的转换器:

xstream.registerConverter(new MapEntryConverter());

问题在于MapEntryConverter似乎不是XStream中的一个类,我对这个人的建议感到困惑。

这是我之前提出的一个问题,问及此人的回答: Converting XML into Java Map<String, Integer>

非常感谢任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:2)

您实际上需要实现自己的*MapConverter扩展Converter;没有名为MapConverter的实际课程,这也是我一段时间以来一直困惑的事情。

查看我已实施并拥有Github的内容。我希望这会让事情变得更容易理解。在编组和解组与相应标记相关的数据时,您基本上必须告诉XStream该做什么。