XStream节点下既有子节点又有值

rt,有如下的xml结构:

<class num="2">
    <student>学生01</student>
    <student>学生02</student>
    <student>
        <name>张三</name>
        <age>12</age>
    </student>
</class>

class节点下有student节点,但是对于student来说,既有可能是文本内容,也有可能有下层嵌套节点,按照标准,我先定义了一个bean:

@XStreamAlias("class")
@Data
public class Class implements Serializable {

	private static final long serialVersionUID = 1L;

	@XStreamImplicit(itemFieldName = "student")
	private List<String> students;
}

这样能够处理“<student>学生01</student>”这样的情况,接着,为了处理嵌套,新定义了一个Student.class

@XStreamAlias("student")
@Data
public class Student implements Serializable {

	private static final long serialVersionUID = 1L;


	@XStreamAlias("name")
	private String name;

	@XStreamAlias("age")
	private String age;
}

然后,将Class的bean修改为:

@XStreamAlias("class")
@Data
public class Class implements Serializable {

	private static final long serialVersionUID = 1L;

	@XStreamImplicit(itemFieldName = "student")
	private List<Student> students;
}

结果如下:

(students=[Student(name=null, age=null), Student(name=null, age=null), Student(name=张三, age=12)])

可以读取嵌套结构了,但是“<student>学生01</student>”无法被识别。

 

搜了很多,大部分解决的都是“节点既有属性又有值”的情况,解法是实现个Converter,这个也要这样做吗?是参考ToAttributedValueConverter的实现逻辑吗?有没有更方便更官方的解决方式?

这种情况很多呀,比如数据结构的树,二叉树这里的结构,都是类里面包含自己的。用domj实现吧

<student>学生01</student>肯定无法识别了,因为实体类中是对象。而不是字符串类型。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632