`

jaxb解析xml工具类

 
阅读更多
引用
jaxb jdk 自带的解析xml的一种方式支持,只需要用注解对javabean进行数据绑定

package com.nnk.flowrecharge.common;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import com.nnk.flowrecharge.config.SystemConfig;

public class XmlUtil {

	private static String DEFAULT_CHARSET = SystemConfig.DEFAULT_CHARSET;

	public static String toXml(Object model) throws JAXBException, IOException {
		ByteArrayOutputStream output = new ByteArrayOutputStream(1024);
		marshal(model, output);
		output.flush();
		return new String(output.toByteArray(), DEFAULT_CHARSET);
	}
	public static String toXml(Object model,boolean isFormatOut) throws JAXBException, IOException {
		ByteArrayOutputStream output = new ByteArrayOutputStream(1024);
		marshal(model, output,isFormatOut);
		output.flush();
		return new String(output.toByteArray(), DEFAULT_CHARSET);
	}
	public static void marshal(Object model, OutputStream output) throws JAXBException {
		JAXBContext jaxbContext = JAXBContext.newInstance(model.getClass());
		Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
		jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
		jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARSET);
		jaxbMarshaller.marshal(model, output);
	}
	public static void marshal(Object model, OutputStream output,boolean isFormatOut) throws JAXBException {
		JAXBContext jaxbContext = JAXBContext.newInstance(model.getClass());
		Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
		jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, isFormatOut);
		jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARSET);
		jaxbMarshaller.marshal(model, output);
	}

	public static <T> T parseXml(Class<T> clazz, String xml) throws JAXBException, IOException {
		byte[] buf = xml.getBytes(DEFAULT_CHARSET);
		ByteArrayInputStream input = new ByteArrayInputStream(buf, 0, buf.length);
		return unmarshal(clazz, input);
	}

	@SuppressWarnings("unchecked")
	public static <T> T unmarshal(Class<T> clazz, InputStream input) throws JAXBException {
		JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
		Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
		return (T) jaxbUnmarshaller.unmarshal(input);
	}

	public static void saveXmlToFile(Object model, String filename) throws FileNotFoundException, JAXBException {
		FileOutputStream fos = new FileOutputStream(filename);
		marshal(model, fos);
	}

	public static void saveXmlToFile(Object model, File file) throws FileNotFoundException, JAXBException {
		FileOutputStream fos = new FileOutputStream(file);
		marshal(model, fos);
	}

	public static <T> T loadXmlFromFile(Class<T> clazz, String filename) throws FileNotFoundException, JAXBException {
		return unmarshal(clazz, new FileInputStream(filename));
	}

	public static <T> T loadXmlFromFile(Class<T> clazz, File file) throws FileNotFoundException, JAXBException {
		return unmarshal(clazz, new FileInputStream(file));
	}

	public static <T> T loadXmlFromFile(Class<T> clazz, InputStream is) throws JAXBException {
		return unmarshal(clazz, is);
	}
}

引用

动态生成xml 的javabean

package com.nnk.flowrecharge.config;

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

@XmlAccessorType(XmlAccessType.NONE)
public class CodeConfig {

	@XmlAttribute
	private String key = "";
	@XmlAttribute
	private String text = "";
	@XmlAttribute
	private String value = "";

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public String getValue() {
		return value;
	}

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

}

引用

package com.nnk.flowrecharge.config;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

import com.nnk.msgsrv.client.common.XmlUtil;

@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.NONE)
public class InterfaceConfig {

@XmlElement(name = "recharge")
private Recharge recharge = new Recharge();
@XmlElement(name = "query")
private Query query = new Query();
@XmlElement(name = "global")
private Global global = new Global();

public static Map<String, CodeConfig> getRechargecodes() {
return rechargecodes;
}
public Global getGlobal() {
return global;
}
public static Map<String, Prama> getPramas() {
return Pramas;
}
public static void setPramas(Map<String, Prama> Pramas) {
InterfaceConfig.Pramas = Pramas;
}
private static InterfaceConfig instance = null;

private static Map<String, CodeConfig> rechargecodes = new HashMap<String, CodeConfig>();
private static Map<String, CodeConfig> queryCodes = new HashMap<String, CodeConfig>();
private static Map<String, Prama> Pramas = new HashMap<String, Prama>();
public Recharge getRecharge() {
return recharge;
}

public Query getQuery() {
return query;
}
public static Map<String, CodeConfig> getQueryCodes() {
return queryCodes;
}
public static synchronized InterfaceConfig getInstance() {
if (instance == null) {
try {
instance = XmlUtil.loadXmlFromFile(InterfaceConfig.class, "config/interface.xml");

rechargecodes.clear();
List<CodeConfig> _codes = instance.getRecharge().getCodes();
for (CodeConfig cc : _codes) {
rechargecodes.put(cc.getKey(), cc);
}
queryCodes.clear();
    _codes = instance.getQuery().getCodes();
for (CodeConfig cc : _codes) {
queryCodes.put(cc.getKey(), cc);
}

Pramas.clear();
List<Prama> _pramas = instance.getGlobal().getPramas();
for (Prama cc : _pramas) {
Pramas.put(cc.getKey(), cc);
}
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
return instance;
}
}

@XmlAccessorType(XmlAccessType.NONE)
class Recharge {

@XmlElement(name = "code")
@XmlElementWrapper(name = "codes")
private List<CodeConfig> codes = new ArrayList<CodeConfig>();

public List<CodeConfig> getCodes() {
return codes;
}

public void setCodes(List<CodeConfig> codes) {
this.codes = codes;
}





}
@XmlAccessorType(XmlAccessType.NONE)
class Query
{
@XmlElement(name = "code")
@XmlElementWrapper(name = "codes")
private List<CodeConfig> codes = new ArrayList<CodeConfig>();
public List<CodeConfig> getCodes() {
return codes;
}
public void setCodes(List<CodeConfig> codes) {
this.codes = codes;
}
}
@XmlAccessorType(XmlAccessType.NONE)
class Global{
@XmlElement(name = "prama")
@XmlElementWrapper(name = "pramas")
private List<Prama> Pramas = new ArrayList<Prama>();

public List<Prama> getPramas() {
return Pramas;
}

public void setPramas(List<Prama> Pramas) {
this.Pramas = Pramas;
}
}

引用

@XmlAttribute 表示属性节点绑定 @XmlRootElement 根节点 @XmlAccessorType xml接触类型,XmlAccessType.NONE表示没有注解标注的不进行动态绑定 XmlAccessType.Filed 表示javabean属性字段都进行绑定,无需再加注解
@XmlElement表示节点绑定

分享到:
评论

相关推荐

    JAVA JAXB 解析XML嵌套子节点为字符串

    使用JAXB解析XML时,我们首先需要创建一个Java类模型,这个模型反映了XML文档的结构。每个XML元素对应一个Java类,类的属性对应元素的属性或子元素。例如,如果XML中有以下结构: ```xml &lt;text&gt;Some text here ...

    jaxb解析xml

    2. 使用 JAXB 的 XJC 工具,通过定义 schema 的方式实现 Java 对象与 XML 的绑定。 ### 3.2 JAXB Annotation 使用说明 #### 3.2.1 @XmlType @XmlType 定义映射的一些规则,用在 class 类的注解,常与 @...

    jaxb解析xml为对象例子

    虽然提供的文件名“bjeoms_exceltool”与标题和描述中的JAXB解析XML主题不直接相关,但它可能指的是一个用于处理Excel数据的工具或库。在许多项目中,开发者可能会结合使用XML和Excel,例如,将XML数据导入或导出到...

    最新JAXB解析XML教程

    2. **XSD到Java**: JAXB提供了工具(如`xjc`)将XML Schema(XSD)文件转换为Java类。这使得基于XSD定义的XML结构可以轻松地在Java应用中使用。 3. **Marshalling和Unmarshalling**: Marshalling是将Java对象转换为...

    jaxb解析生成xml

    以下是一个简单的JAXB解析生成XML的例子: ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; public class JaxbExample { public static ...

    JAXB工具类 xml转为java对象 java对象转为xml

    // 解析XML文件 Person person = (Person) unmarshaller.unmarshal(new File("person.xml")); System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } } ``` #...

    利用JAXB进行xml和javabean之间转换

    如果不希望手动添加注解,可以使用JAXB的绑定工具(如`xjc`)从XML Schema (XSD)文件生成对应的Java类。这一步骤将创建带有正确注解的Java类,以便JAXB理解XML结构。 (3) **实例化Java对象** 创建Java对象并填充...

    xml解析工具类

    - 如果工具类的功能不能满足需求,开发者可以考虑扩展其源代码,或者结合其他XML处理库,如JAXB(Java Architecture for XML Binding)或JDOM等。 在实际项目中,利用XML解析工具类如"WXML",可以大大提高开发效率...

    java一键xml转map,一键map转xml工具类

    在Java中,我们可以使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`来解析XML文档,然后遍历DOM树,将其节点转化为Map。例如,每个XML元素的标签名作为键,元素的文本内容作为值。如果元素...

    XML解析工具类

    例如,如何使用DOM解析XML并获取节点值,如何使用SAX处理大型XML文件,或者如何利用JAXB完成对象与XML之间的转换。 6. **性能比较** DOM解析器适合小规模、结构复杂的XML文件,便于直接操作;SAX解析器适用于大...

    java 解析xml 多级

    在实际项目中,为了提高效率和易用性,可以封装这些解析逻辑到一个类或者工具类中,提供统一的接口供其他部分代码调用。同时,考虑到性能和资源消耗,对于非常大的XML文件,可能需要考虑使用SAX解析或者StAX...

    JAXB与xml相互转换实例

    - **性能优化**:由于是编译时绑定,JAXB转换过程通常比运行时解析XML快。 - **易于维护**:当XML Schema更改时,只需要重新生成Java类,无需修改大量代码。 然而,JAXB也有一些局限性,例如不支持某些复杂的XML...

    idea 中用jaxb 读xml中数据

    4. **解析XML到Java对象**:使用Unmarshaller对象的`unmarshal`方法,我们可以将XML文件解析为Java对象。 ```java Person person = (Person) unmarshaller.unmarshal(file); ``` 5. **处理解析后的数据**:现在,...

    jaxb (XML操作)

    2. **实例化(Unmarshalling)**:当需要将XML数据转换为Java对象时,JAXB使用Unmarshaller接口解析XML文档,生成对应的Java对象。这个过程是将XML数据"反序列化"为可操作的Java对象。 3. **序列化(Marshalling)*...

    jaxb xml 转map

    然后,JAXB会使用这些类来解析XML并生成相应的对象实例。对于简单的XML,这通常很有效。但是,对于复杂的XML结构,转换为Map可能更为合适。 转换XML到Map的过程通常包括以下步骤: 1. 创建一个XML解析器:使用`...

    通过JAXB实现完成java对象和xml的互相转换

    JAXB基于Java注解,这些注解用于标记Java类和它们的属性,以便JAXB知道哪些元素和属性应该映射到XML中。最常见的注解有`@XmlRootElement`,用于标记作为XML根元素的类;`@XmlElement`,用于将类的字段或方法映射到...

    webservice之使用jaxb把xml转换Object或把对象转换成xml文件

    3. 解析XML:有了Java类,我们就可以使用JAXB提供的`Unmarshaller`接口将XML文档解析成Java对象。以下是一个简单的示例: ```java JAXBContext jaxbContext = JAXBContext.newInstance(User.class); Unmarshaller ...

    JAXB xml与对象转换

    JAXB通过解析XML文档,根据预先定义的XML Schema(XSD)或者Java注解(@XmlRootElement,@XmlElement等),创建相应的Java对象实例。 2. **Marshalling**:相反,Marshalling是将Java对象序列化为XML文档的过程。这...

    JAXB完成XML和Java对象的互转

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例...

Global site tag (gtag.js) - Google Analytics