Java - XML 使用 XStream 到 HashMap - CannotResolveClassException: Response

Java - XML to HashMap using XStream - CannotResolveClassException: Response

我需要转换这个 XML:

<?xml version="1.0" encoding="utf-8"?>
<Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Status>0</Status>
    <Credit>98</Credit>
</Response>

到 Java HashMap 使用 XStream:

XStream xStream = new XStream();
xStream.alias("hashmap", java.util.HashMap.class);
HashMap<String, Object> myHashmap = (HashMap<String, Object>) xStream.fromXML(myXmlAsString);

但是抛出了这个异常:

com.thoughtworks.xstream.mapper.CannotResolveClassException: Response

我的问题是:我在做什么?我在这里浏览过类似的主题,但 none 似乎有所帮助。任何建议表示赞赏

我不确定这是准确的答案,但我们试试吧。

IMO 错误是试图将 XML 直接映射到 HashMap,而没有告诉 XStream 如何做。

出于这个原因,我建议生成一个反映 xml 模式的 Class 和一个将第一个映射到地图的第二个 Class。

例如,我把你的代码放在这个简单的 class:

enter code herepackage com.Whosebug.test.xstream_xml_to_map;

import java.io.File;

import com.thoughtworks.xstream.XStream;

public class App {

public static void main(String[] args) {
    XStream xStream = new XStream();
    File f = new File(App.class.getClassLoader().getResource("provided.xml").getFile());
    xStream.alias("Response", Response.class);
    Response res = (Response) xStream.fromXML(f);
    System.out.println("Credit: "+res.getCredit());
    System.out.println("Status: "+res.getStatus());
}
}

使用此响应 class:

package com.Whosebug.test.xstream_xml_to_map;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("Response")
public class Response {

private String Status = new String();

private String Credit = new String();

public String getStatus() {
    return Status;
}

public String getCredit() {
    return Credit;
}
}

现在你可以使用res对象来生成你喜欢的HashMap了

好的,我现在有更好的解决方案,由同事提供给我。

首先,您需要生成一个 XML 架构定义 - XSD 文件。例如,可以在 Internet 上找到许多生成器。然后您需要使用在 jdk 目录中找到的 xjc 可执行文件。它在选定的目的地创建 pojo 类,使用那些 类 您可以使用 JAXB 将数据从 XML 映射到它们。