使用 XStream 时,如果我尝试序列化具有java.util.List空集合的对象,我会得到空标记(在集合字段上)。如何删除 xml 输出中的空标签?
我XStream用来写一个对象xml file.
然后我再次反序列化文件以使用对象.
我的问题是,在我关闭程序后,xml"文件"消失了.那么如何将此xml文件保存到特定目录?我已经尝试FileOutputStream但它不起作用...我也谷歌它,但发现不适合我...
方法savePerson
public void savePerson(String uNummer, Person person) {
System.out.println("save person");
try{
xml = xstream.toXML(person);
}catch (Exception e){
System.err.println("Error in XML Write: " + e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
而方法readPerson
public Person readPerson(String uNummer) {
System.out.println("read person");
Person person = new Person();
try{
person = (Person) xstream.fromXML(file_path + uNummer + ".xml");
}catch(Exception e){
System.err.println("Error in XML Read: " + e.getMessage());
}
return person;
}
Run Code Online (Sandbox Code Playgroud)
目录:\\releasearea\ToolReleaseArea\PersistenceSave
编辑
正确的代码 :(由ppeterka …
我试图使用XStream将XML文件解析为对象,但我收到此异常:
线程"main"中的异常com.thoughtworks.xstream.mapper.CannotResolveClassException:com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:56)中的服务器位于com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper) .java:30)在com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)[...]
这是我的XML:
<servers>
<server>
<ip>10.196.113.27</ip>
</server>
<server>
<ip>10.196.113.31</ip>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public class ServerIP {
private String ip;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
}
public class ServerHandler {
private String fileName = "servers.xml";
private String path = "J:\\workspace\\LOG730\\src\\Q3\\";
private XStream xstream = new XStream(new DomDriver());
public void readFromXML() {
try {
FileInputStream fis = new FileInputStream(path + fileName);
ServerIP server = (ServerIP) xstream.fromXML(fis, new ServerIP());
System.out.println("Host: " …Run Code Online (Sandbox Code Playgroud) 我想借助于其中提供的addImplicitMap方法使用xstream序列化该类.类看起来像:
class MapTest{
private Map<String, String> mapList;
public MapTest() {
mapList= new HashMap<String, String>();
}
public void setServicesHealth(String id, String name) {
map.put(id, name);
}
Run Code Online (Sandbox Code Playgroud)
我尝试过:
class MapTestMain{
public static void main(String args[]){
MapTest services = new MapTest();
services.setServicesHealth("ID01", "Jack");
services.setServicesHealth("ID02", "Neil);
XStream stream = new XStream(new StaxDriver());
stream.alias("MapTest", MapTest.class);
stream.addImplicitMap(MapTest.class, "map", "id", String.class, "name");
String xmlStr = stream.toXML(services);
System.out.println(xmlStr);
}
}
Run Code Online (Sandbox Code Playgroud)
但我没有得到正确的输出.我的预期输出如下:
<?xml version="1.0" ?>
<MapTest>
<id>Started</id>
<name>Started</name>
</MapTest>
Run Code Online (Sandbox Code Playgroud)
请帮帮我...
我有一个XML字符串.我正在尝试将该字符串转换为地图,以便我可以获得键和值.但它无法转换.这是我的代码
String xmlString = "<?xml version="1.0" encoding="UTF-8"?><user>
<kyc></kyc>
<address></address>
<resiFI></resiFI></user>"
def convertStringToDocument = {
xmlString ->
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
builder = factory.newDocumentBuilder();
org.w3c.dom.Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
def populateDocProofsFromWaiversXML = {
xmlString, mandateFlag ->
final List<DocumentProof> documentProofs = new ArrayList<DocumentProof>();
if (xmlString != null) {
try {
HashMap<String, String> values = new HashMap<String, String>();
Document xml = convertStringToDocument(waiversList);
org.w3c.dom.Node user = xml.getFirstChild(); …Run Code Online (Sandbox Code Playgroud) 我正在阅读Xstream教程
http://x-stream.github.io/annotations-tutorial.html
如何将处理指令添加到xml响应中
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n
Run Code Online (Sandbox Code Playgroud)
例如:Xstream给出响应
<message><type>15</type></message>
Run Code Online (Sandbox Code Playgroud)
但我希望该指令也是响应的一部分..
有什么方法可以得到它..
现在正在使用此标记为字符串响应添加前缀,我觉得这不是最好的方法.
问候