We usually use List<Item> it is complete support.
and We also usually use Map<item.id,Item>, this hasn't original support.
package ycl.learn.xml.jaxb.map;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
public class Employee {
@XmlJavaTypeAdapter(MapRealXmlAdapter.class)
@XmlElement(name="familys")
public Map<String,Family> familiesmap = new HashMap<String,Family>();
}
package ycl.learn.xml.jaxb.map;
import javax.xml.bind.annotation.XmlAttribute;
public class Family {
private String name;
private String value;
@XmlAttribute
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlAttribute
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String toString(){
return name+":"+value;
}
}
package ycl.learn.xml.jaxb.map;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlMixed;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class MapRealXmlAdapter extends XmlAdapter<MapRealXmlAdapter.AdaptedHashMap,Map<String,Family>> {
@Override
public AdaptedHashMap marshal(Map<String,Family> v) throws Exception {
AdaptedHashMap adaptedMap = new AdaptedHashMap();
for(Map.Entry<String,Family> entry : v.entrySet()) {
adaptedMap.getFamily().add(entry.getValue());
}
return adaptedMap;
}
@Override
public Map<String,Family> unmarshal(AdaptedHashMap v) throws Exception {
Map<String, Family> mappings = new HashMap<String, Family>();
for(Family mapping : v.getFamily()) {
mappings.put(mapping.getName(), mapping);
}
return mappings;
}
public static class AdaptedHashMap{
private List<Family> family = new ArrayList<Family>();
@XmlElement(name="family")
public List<Family> getFamily() {
return family;
}
public void setFamily(List<Family> family) {
this.family = family;
}
}
}
package ycl.learn.xml.jaxb.map;
import java.io.File;
import java.io.FileNotFoundException;
import javax.xml.bind.JAXBException;
import ycl.learn.xml.jaxb.JAXBUtil;
public class JAXBUtilTest {
private static final String FILE_NAME_emps = "employees.xml";
private static final String FILE_NAME_emps_copy = "employees_copy.xml";
/**
* @param args
* @throws JAXBException
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException, JAXBException {
JAXBUtil<Employee> ju = new JAXBUtil<Employee>();
Employee empant = ju.unmarshal(Employee.class, new File(FILE_NAME_emps));
System.out.println("reader success lll000");
//System.out.println(empant.family);
System.out.println(empant.familiesmap);
ju.marshal(empant, new File(FILE_NAME_emps_copy));
}
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
<familys>
<family name="a"></family>
<family name="b" value="ccc"></family>
<family name="c" value="cccc" extendss="a"></family>
</familys>
</employee>
this can be marshal and unmarshal this familys to map/ot xml.
but the export xml is
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
<familys>
<family value="ccc" name="b" />
<family value="cccc" name="c" />
<family name="a" />
</familys>
</employee>
there is the difference is the order, we know the map has no order, but the key's hascode.
so If we want to export the order datas, we can do two ways.
one way:
1. rewrite the key's compared method.
2. use sortedHashMap.
分享到:
相关推荐
本话题我们将深入探讨如何使用JAXB将XML转换为Map。 XML是一种结构化数据表示方式,广泛用于数据交换和配置文件。而Map是Java中的一种数据结构,它将键(Key)与值(Value)关联起来,提供快速查找和存储。将XML...
JAXB(Java Architecture for XML Binding)是Java平台上的一个标准,它提供了一种在Java对象和XML文档之间进行映射的机制。Eclipse作为一款强大的Java集成开发环境,为开发者提供了丰富的插件支持,其中包括JAXB的...
JAXB2,全称为Java Architecture for XML Binding 2,是Java平台上的一个标准技术,用于在XML和Java对象之间进行绑定。它允许开发者通过简单的API将XML文档转换为Java对象,反之亦然,大大简化了XML数据处理。JAXB2...
标题中的"jaxb-impl-2.3.0、jaxb-core-2.3.0、jaxb-api-2.3.0"是JAXB的不同组件版本号,它们在处理XML到Java对象之间的转换时起到关键作用。在描述中提到的“Maven项目中缺少jaxb-api的异常报错”,通常指的是在运行...
**JAXB(Java Architecture for XML Binding)** 是Java平台中用于XML到Java对象绑定的API,它是Java EE和Java SE标准的一部分,允许开发者在Java应用程序中方便地将XML数据转换为Java对象,反之亦然。这个过程极大...
3. **JAXB与Map**:虽然JAXB不是设计用来处理Map的,但通过自定义marshaller和unmarshaller,可以实现Map到XML的转换。这个过程相对复杂,需要编写额外的代码。 4. **Jackson与Map**:Jackson对Map的支持更加友好。...
`jaxb-api-2.1.jar` 和 `jaxb-impl-2.1.8.jar` 是Java应用程序中用于XML绑定(Java Architecture for XML Binding,简称JAXB)的重要库文件。JAXB是Java SE和Java EE平台的标准部分,它提供了一种将XML文档与Java...
适配器需要扩展`XmlAdapter`并重写`marshal()`和`unmarshal()`方法。 8. **@XmlAccessorType(XmlAccessType.PROPERTY)**: 与`FIELD`相反,`PROPERTY`表示JAXB将根据getter和setter方法来绑定属性,而不是直接访问...
`jaxb-api`和`jaxb-impl`是JAXB框架的核心组成部分。这两个JAR文件在处理XML到Java对象的绑定过程中扮演着关键角色。 1. **jaxb-api.jar**: 这个库包含了JAXB API,即Java接口和抽象类,定义了JAXB的工作方式。它...
这些文件是Java编程环境中常用的库文件,主要用于XML绑定(Java Architecture for XML Binding,JAXB)和JavaBeans Activation Framework(JAF)。在Java应用程序开发中,尤其是处理XML数据时,这些库扮演着至关重要...
Java Architecture for XML Binding (JAXB) 是Java平台中用于XML到Java对象绑定的标准技术,它允许开发者在Java程序中直接操作XML数据,而无需编写大量的XML解析和序列化代码。JAXB 2.3.0是该技术的一个版本,包含了...
Java Architecture for XML Binding (JAXB) 是Java平台中用于XML数据绑定的标准库,它使得Java对象和XML文档之间可以进行无缝转换。在给定的压缩包文件中,包含了一些核心的JAXB组件以及相关的依赖库,如`jaxb-impl....
这可以通过实现`XmlAdapter`接口来完成,它允许你控制XML元素和属性如何映射到Java类型。 7. **JAXB插件**: 在开发过程中,可能会使用到各种JAXB插件来增强其功能,例如,添加代码生成插件,可以在构建过程中自动...
当我们需要处理XML文件,比如从XML中提取数据时,JAXB(Java Architecture for XML Binding)是一个强大的工具。本教程将详细解释如何在Idea中利用JAXB来读取XML文件中的数据。 JAXB是Java标准API,它提供了将Java...
标题提到的"jaxb-api.jar.jaxws-api.zip_ jaxb-api.jar_cxf_jax-ws.jar_jaxb-api",是针对这个问题提供的一组支持包。 **JAXB(Java Architecture for XML Binding)** 是Java平台的一个标准,它允许开发者将XML文...
Java Architecture for XML Binding (JAXB) 是Java平台中用于XML数据绑定的标准API,它使得Java对象和XML文档之间可以进行无缝转换。`jaxb-api-2.1.9.jar` 是一个包含JAXB API的库文件,版本为2.1.9,用于支持开发...
在Android平台上进行开发时,有时候我们需要处理XML数据,这时候JAXB(Java Architecture for XML Binding)就显得非常有用。JAXB是Java SDK中的一个标准API,它允许开发者将XML文档与Java对象之间进行自动的双向...
在Java开发中,JAXB(Java Architecture for XML Binding)是一个用于将XML文档和Java对象之间进行绑定的技术。在处理XML文件时,特别是涉及到序列化和反序列化时,可能会遇到字符编码问题,即所谓的“乱码”。这个...
在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个错误,按照打出的信息Use the endorsed directory mechanism to place jaxb-api.jar in ...