将XML转换为Java Map

我正在尝试将XML转换为Java代码。 此XML位于不同的文件中; 它匹配单词与数字(概率分布),看起来像这样:

  1 2 2 3 2 1 5 1 1 22 2 26 .......  

我正在尝试将其转换为Java Map,这是我正在使用的代码:

 XStream xstream = new XStream(); @SuppressWarnings("unchecked") Map englishCorpusProbDist = (Map)xstream.fromXML(new File("LocationOfFileOnMyComputer/frequencies.xml")); 

目前,每当我尝试运行上述Java代码时,我在控制台中都会遇到以下exception:

 Exception in thread "main" com.thoughtworks.xstream.mapper.CannotResolveClassException: root at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:47) at com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29) at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:133) at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1185) at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1169) at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1133) at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1075) at ProductAttributeExtractor.main(ProductAttributeExtractor.java:23) 

这是一个相关的post,但我的问题是增加了一层复杂性,因为我的XML匹配带有整数的字符串,不幸的是Java Map不能使用整数,它必须使用整数(这是非常令人沮丧的): 如何将XML转换为java.util.Map,反之亦然

任何帮助你都会非常感激。 提前致谢!

您需要注册MapConverter,这是实现Converter的类

xstream.registerConverter(new MapEntryConverter());

希望有所帮助

Underscore-java库可以将xml转换为hashmap,反之亦然。 我是该项目的维护者。 实例

代码示例:

 import com.github.underscore.lodash.U; public class Main { public static void main(String[] args) { String xml = "" + "" + " 1" + " 2" + " 2" + " 3" + " 2" + " 1" + " 5" + " 1" + " 1" + " 22" + " 2" + " 26" + ""; String result = U.fromXml(xml).toString(); // "{Durapipe=1, EXPLAIN=2, woods=2, hanging=3, hastily=2, localized=1, " // "Schuster=5, regularize=1, LASR=1, LAST=22, Gelch=2, Gelco=26}" } }