Elim的博客

用来记录一些原创性的总结


Elim

JAXB之XmlValue

假设有如下这样一个User类。

	public static class User {
		private Integer id;
		private String username;
		
		public Integer getId() {
			return id;
		}
		public void setId(Integer id) {
			this.id = id;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
	}

我希望把它跟XML绑定起来,且要求生成的XML保持如下结构。

<user id="1">张三</user>

对于id而言,很明显它被映射为XML元素的一个属性,这个在之前介绍的@XmlAttribute中已经介绍过了,只要在id属性上加上@XmlAttribute即可。那么username属性如何映射为user元素中间的值呢?在XML中元素中间的纯文本也算是一个节点,即文本节点。在JAXB中使用@XmlValue表示。所以我们的上述需求可以如下配置。

	@XmlRootElement
	@XmlAccessorType(XmlAccessType.FIELD)
	public static class User {
		@XmlAttribute
		private Integer id;
		@XmlValue
		private String username;
		
		public Integer getId() {
			return id;
		}
		public void setId(Integer id) {
			this.id = id;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
	}

需要注意的是,在使用@XmlValue时,我们的元素只能有纯文本节点,不能再有其它的节点,但是可以有多个属性。

(注:本文由Elim写于2017年8月10日)