无法使用XStream将XML转换为Map。
无法使用XStream将XML转换为Map。
我需要将XML文件转换成Map。
根据这里的描述,我正在尝试读取一些存储库XML文件并将其转换为Map。
但是这给了我一个错误消息:
[Fatal Error] :1:1: Content is not allowed in prolog.
我的XML文件在第一行上不包含?
符号,我已经将它们移除了。
我的代码是:
static MaprepValues; static String mainRepositoryXML = "common.xml"; static public void setRepValues(){ String rootPath = Paths.get(".").toAbsolutePath().normalize().toString(); String path = rootPath + File.separator + "src"+ File.separator + "main" + File.separator + "resources" + File.separator + "repository" + File.separator + mainRepositoryXML; XStream xStream = new XStream(new DomDriver()); xStream.registerConverter(new MapEntryConverter()); xStream.alias("root", Map.class); repValues = (Map ) xStream.fromXML(path); } public static class MapEntryConverter implements Converter { public boolean canConvert(Class clazz) { return AbstractMap.class.isAssignableFrom(clazz); } public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { AbstractMap map = (AbstractMap) value; for (Object obj : map.entrySet()) { Map.Entry entry = (Map.Entry) obj; writer.startNode(entry.getKey().toString()); Object val = entry.getValue(); if ( null != val ) { writer.setValue(val.toString()); } writer.endNode(); } } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { Map map = new HashMap (); while(reader.hasMoreChildren()) { reader.moveDown(); String key = reader.getNodeName(); // nodeName aka element's name String value = reader.getValue(); map.put(key, value); reader.moveUp(); } return map; } }
上面的代码实际上是从上述链接中复制粘贴的。
XML文件似乎非常简单:
C:\Users\myUserDirectory\Downloads /Downloads https://www.youtube.com/ https://www.ebay.com/ https://proto.gr/sites/www.proto.gr/files/styles/large_retina/public/images/fruits/cherries.jpg https://i.pinimg.com/564x/97/86/3e/97863e0a14b69caeea2c92537a81fb1b.jpg https://mallofnorway.com/content/uploads/2020/07/008840118.jpg
我对将XML转换为Map和反之的过程完全不熟悉。没有使用Java处理XML文件的经验。
我看到了所有这些 问题 链接 这里(还有更多),但是仍然找不到适合我的解决方案。
我做错了什么?
真的很感谢任何帮助!
问题原因:XML与Map之间的转换失败。解决方法:使用流而不是字符串进行XML转换,并确保根元素与实际的根元素匹配。
在使用XStream进行XML转换时,有时会遇到将XML转换为Map时出现"Can not convert XML to Map with XStream"的问题。这个问题的出现原因是XML与Map之间的转换失败。
为了解决这个问题,我们需要进行两个修复操作。首先,我们需要使用流而不是字符串进行XML转换。其次,我们需要确保根元素与实际的根元素匹配。
以下是修复后的代码示例:
XStream xStream = new XStream(new DomDriver()); xStream.registerConverter(new MapEntryConverter()); xStream.alias("general", Map.class); Object o = xStream.fromXML(new FileInputStream("/home/josejuan/tmp/y.xml")); repValues = (Map<String,Object>) o;
通过使用流来进行XML转换,我们可以避免将字符串转换为流的问题。同时,通过使用xStream.alias方法,我们可以指定实际的根元素名称,使其与XML中的根元素匹配。
修复后,我们可以看到输出结果如下图所示: