You need to enable JavaScript to run this app. 使用XStream将XML转Map时出现Content is not allowed in prolog错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:09:03