weixin_46658126 2021-05-15 11:33 采纳率: 50%
浏览 48
已采纳

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的实现逻辑吗?有没有更方便更官方的解决方式?

  • 写回答

3条回答 默认 最新

  • 关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?