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 映射到它们。
我需要转换这个 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 映射到它们。