使用XStream将XML转Map时出现Content is not allowed in prolog错误如何解决
问题1:XML读取方式错误
XStream的fromXML(String xml)方法的入参如果是字符串类型,会直接把该字符串作为XML内容解析,而不会将其识别为文件路径去读取对应文件。你当前传入的是文件路径字符串,相当于直接把路径文本当做XML解析,自然会触发首字符不合法的prolog错误。
你需要先把路径转换为File对象/文件输入流再传入fromXML方法。
问题2:根节点别名不匹配
你代码中配置的xStream.alias("root", Map.class)是将XML中名为root的节点映射为Map类型,但你的XML根节点是general,两者不对应,即使文件读取正确也无法完成解析。
你需要将别名配置修改为和你的XML根节点一致。
修正后的代码
static public void setRepValues() throws FileNotFoundException { 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()); // 修正别名,和XML根节点general对应 xStream.alias("general", Map.class); // 传入File对象,而不是路径字符串 repValues = (Map<String,Object>) xStream.fromXML(new File(path)); }
如果还有编码类问题,可以在初始化DomDriver时指定字符集,比如new DomDriver("UTF-8")。
内容的提问来源于stack exchange,提问作者Prophet
相关产品推荐
相关产品推荐

