gpt4 book ai didi

java - 解析 XML 时拦截 Xstream

转载 作者:行者123 更新时间:2023-11-30 09:51:36 24 4
gpt4 key购买 nike

假设我有一个像这样的简单 Java 类:

public class User {

String firstName;
String lastName;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

}

现在,假设我要解析以下 XML:

<user>
<firstName>Homer</firstName>
<lastName>Simpson</lastName>
</user>

我可以像这样在 XStream 中毫无问题地做到这一点:

User homer = (User) xstream.fromXML(xml);

好的,到目前为止一切都很好,但这是我的问题。

假设我有以下要解析的 XML:

<user>
<fullName>Homer Simpson</fullName>
</user>

如何使用 XStream 将此 XML 转换为相同用户对象?

我想要一种实现某种回调的方法,以便在 XStream 解析 fullName 字段时,我可以将字符串一分为二,并在用户对象上手动设置名字和姓氏字段。这可能吗?

请注意,我不是在问如何将字符串一分为二(这是最简单的部分),我想知道如何拦截 XML 解析,这样 XStream 就不会尝试反射性地设置 User 对象上的 fullName 字段(这显然不存在)。

我查看了 XStream 提供的转换器,但不知道如何将其用于此目的。

如有任何帮助,我们将不胜感激。

最佳答案

您需要一个自定义转换器:

import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

public class UserConverter implements Converter
{

@Override
public boolean canConvert(Class clazz) {
return clazz.equals(User.class);
}

@Override
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context)
{

}

@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context)
{
User user = new User();

reader.moveDown();
if ("fullName".equals(reader.getNodeName()))
{
String[] name = reader.getValue().split("\\s");
user.setFirstName(name[0]);
user.setLastName(name[1]);
}
reader.moveUp();

return user;
}
}

引用:http://x-stream.github.io/converter-tutorial.html

关于java - 解析 XML 时拦截 Xstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4622863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com