`
kamuikyo
  • 浏览: 28899 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

JAXB学习笔记(四)

 
阅读更多

然后有人又说,我想给节点加属性怎么办,看下面例子

这里用一种怪异的xml形势来说明怎么处理,至于为什么使用这样的xml格式,实际项目中就会有这种非正常思维的情况,人们总喜欢用节点属性(attributer)值来表示节点值(textValue),而让节点值为空,来达到所谓的结构清晰

 

package cn.uyunsky.blog.xml.demo4;

import java.io.StringReader;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * <p>attribute属性值不会加,看这个例子</p>
 */
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Persion {
	
	private DemoField userid;

	private DemoField username;

	private DemoField birthday;

	public DemoField getUserid() {
		return userid;
	}

	public void setUserid(DemoField userid) {
		this.userid = userid;
	}

	public DemoField getUsername() {
		return username;
	}

	public void setUsername(DemoField username) {
		this.username = username;
	}

	public DemoField getBirthday() {
		return birthday;
	}

	public void setBirthday(DemoField birthday) {
		this.birthday = birthday;
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("Persion [userid=");
		builder.append(userid);
		builder.append(", username=");
		builder.append(username);
		builder.append(", birthday=");
		builder.append(birthday);
		builder.append("]");
		return builder.toString();
	}

	public static void main(String[] args) {
		try {
			JAXBContext jaxbContext = JAXBContext.newInstance(Persion.class);
			Persion persion = new Persion();

			DemoField userid = new DemoField();
			userid.setName("userid");
			userid.setValue("112");
			persion.setUserid(userid);

			DemoField username = new DemoField();
			username.setName("username");
			username.setValue("就不告诉你");
			persion.setUsername(username);

			DemoField birthday = new DemoField();
			birthday.setName("birthday");
			birthday.setValue(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
			persion.setBirthday(birthday);


			Marshaller marshaller = jaxbContext.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			
			//换个显示方式
			marshaller.marshal(persion, System.out);

			StringWriter writer = new StringWriter();
			marshaller.marshal(persion, writer);
			String xml = writer.getBuffer().toString();

			Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
			Object bean = unmarshaller.unmarshal(new StringReader(xml));
			System.out.println(bean);

		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}

}

  DemoField对象来表示一个节点

package cn.uyunsky.blog.xml.demo4;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlValue;

@XmlAccessorType(XmlAccessType.FIELD)
public class DemoField {

	@XmlAttribute
	private String name;

	@XmlValue
	private String value;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("DemoField [name=");
		builder.append(name);
		builder.append(", value=");
		builder.append(value);
		builder.append("]");
		return builder.toString();
	}
	
	

}

 输出结果

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persion>
    <userid name="userid">112</userid>
    <username name="username">就不告诉你</username>
    <birthday name="birthday">2011-09-28</birthday>
</persion>
Persion [userid=DemoField [name=userid, value=112], username=DemoField [name=username, value=就不告诉你], birthday=DemoField [name=birthday, value=2011-09-28]]
 总之,通过如上代码能明白通过@XmlAttribute、@XmlValue来控制是否节点属性和节点值就好了

 

分享到:
评论

相关推荐

    JAXB学习笔记(六)

    NULL 博文链接:https://kamuikyo.iteye.com/blog/1182316

    JAXB学习笔记

    JAXB(Java Architecture for XML Binding)是Java平台上的一项标准技术,用于在XML和Java对象之间进行绑定,从而实现XML文档和Java对象之间的自动转换。它提供了方便的数据交换方式,简化了XML处理,使得开发者可以...

    JAXB 学习笔记

    **JAXB(Java Architecture for XML Binding)学习笔记** JAXB是Java平台标准版(Java SE)的一部分,它提供了一种方便的方式来将XML数据绑定到Java对象上,以及将Java对象转换为XML数据。这个强大的工具使得开发...

    《Jaxb2 转换XML文档》学习笔记

    **JAXB2 转换XML文档** JAXB(Java Architecture for XML Binding)是Java平台标准版(Java SE)的一部分,用于将Java对象绑定到XML文档,并反之亦然。JAXB2是JAXB的第二个主要版本,引入了更多功能和改进,使其在...

    Web Service学习笔记

    在本学习笔记中,我们将深入探讨Web服务的核心概念、技术栈以及实际案例。 一、Web服务的核心概念 1. **SOAP (Simple Object Access Protocol)**:SOAP是一种基于XML的协议,用于交换结构化信息,是Web服务的基础...

    java的学习笔记.zip

    这个"java的学习笔记.zip"文件很可能是对Java编程的详细学习记录,包含了一些关键概念、语法、类库和最佳实践。 在Java学习笔记中,可能会涵盖以下几个主要部分: 1. **基础概念**:这部分会介绍Java的基础,包括...

    Apache_cxf_学习笔记

    本学习笔记旨在提供对Apache CXF的基本理解、功能特性和实际操作指导。 **1. CXF 简介** 1.1 CXF概述 Apache CXF是一个全面的服务开发框架,它允许开发者创建和部署各种类型的Web服务,包括基于SOAP、RESTful、WS-...

    Java JDK 6学习笔记

    本学习笔记将深入探讨JDK 6中的关键知识点,包括语法改进、API增强、性能优化以及其他重要特性。 一、语法改进 1. 集合初始化简化:JDK 6允许在创建集合时直接通过花括号初始化,如`List&lt;String&gt; list = new ...

    java学习笔记JDK6课件和课本代码

    本资源"java学习笔记JDK6课件和课本代码"是一个针对初学者和有一定基础的开发者的学习资料集合,它涵盖了JDK6版本的相关内容。 JDK6是Java历史上的一个重要版本,发布于2006年,引入了许多新特性,包括增强的Swing...

    Java JDK 6.0基础学习笔记.rar

    这份"Java JDK 6.0基础学习笔记"涵盖了该版本的关键知识点,包括语法、类库更新以及开发环境的搭建。 首先,JDK 6.0中的一个重要变化是引入了增强的for循环(Enhanced For Loop),也称为foreach循环,简化了对数组...

    良葛格Java JDK 5.0学习笔记

    这份"良葛格Java JDK 5.0学习笔记"无疑是初学者掌握这一版本Java精髓的宝贵资料。下面将详细阐述Java JDK 5.0中的关键知识点。 1. **自动装箱与拆箱**: JDK 5.0引入了自动装箱和拆箱机制,使得基本数据类型与对应...

    Java+JDK+6学习笔记

    本学习笔记将深入探讨Java JDK 6中的关键知识点,帮助初学者和有经验的开发者更好地理解和应用这个版本的Java。 一、Java基础 Java是一种面向对象的编程语言,其特点包括跨平台性、垃圾回收机制和自动内存管理。在...

    web service入门学习笔记

    Web Service入门学习笔记 Web Service是一种基于互联网的、平台无关的通信协议,它允许不同系统间的应用程序通过网络互相调用,实现数据交换和服务共享。在本文中,我们将深入探讨Web Service的基本概念,以及如何...

    林信良的jdk6学习笔记源代码

    《林信良的JDK6学习笔记源代码》是一份珍贵的学习资源,它包含了林信良在其著作《JDK6学习笔记》中所使用的全部源代码。这份源代码集可以帮助读者深入理解书中讲解的Java编程概念和技术,尤其对于正在学习JDK6版本的...

    J2EE知识点大全,学习笔记

    这个压缩包文件“J2EE知识点大全,学习笔记”显然是一个关于J2EE的综合学习资料,其中可能包含了J2EE的多个核心概念和技术。下面,我们将深入探讨J2EE的关键知识点。 1. **Servlet与JSP**:Servlet是Java服务器端...

    jdk6学习笔记(17,18,19,20,21)

    这些学习笔记涵盖了第17到21章的内容,以下是其中的一些关键知识点: 1. **枚举(Enum)的增强**: JDK 6对枚举类型进行了增强,支持枚举常量之间的比较,可以实现Comparable接口,还引入了枚举套接字(EnumSet)...

    jdk学习笔记

    【JDK学习笔记详解】 JDK,全称Java Development Kit,是Java编程语言的核心组件,包含了一组开发和运行Java应用程序所需的工具与API。这份"jdk学习笔记"为我们提供了深入理解JDK的重要参考资料,旨在帮助Java...

    ejb 学习笔记6

    ### EJB学习笔记第六部分详解 #### 一、EJB之间的调用 EJB (Enterprise JavaBeans) 是Java EE平台中用于开发分布式企业应用程序的重要组件。在实际开发过程中,经常需要一个EJB调用另一个EJB来实现更复杂的业务...

    json学习笔记、jackson的jar包

    在这个“json学习笔记、jackson的jar包”中,我们可以深入探讨JSON和Jackson的相关知识点。 1. JSON基本概念: - JSON是一种文本格式,易于人阅读和编写,同时也易于机器解析和生成。 - JSON数据结构主要由对象...

Global site tag (gtag.js) - Google Analytics