xml和java互轉

JAXB是什麼?
JAXB(即Java Architecturefor XML Binding)是一個業界的標準,
即是一項可以根據XML Schema產生Java類的技術。
該過程中,JAXB也提供了將XML實例文檔反向生成Java對象樹的方法,

    並能將Java對象樹的內容重新寫到XML實例文檔。

一、創建具無屬性的類

一、創建people類
package xmltojava;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
//@XmlAccessorType(XmlAccessType.FIELD)
@XmlAccessorType(XmlAccessType.PROPERTY)//只有 屬性 才能被轉換成 xml 中的標籤。
public class People {
	String name="JAVA Convert XML";		
}
二、創建互轉測試類
package xmltojava;

import java.io.StringReader;

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

public class JavaToXml {
	public static void main(String[] args) throws JAXBException {
		// 首先創建 JAXBContext
		JAXBContext context=JAXBContext.newInstance(People.class);
		// 初始化 Marshaller
		Marshaller marshaller=context.createMarshaller();
		// 創建簡單的 Java bean
		People p=new People();
		// 將結果輸出到控制檯
		//此處name不是peopel類的屬性(無set|get方法)所以解析爲xml無name元素/標籤
		marshaller.marshal(p, System.out);
		System.out.println();
		//初始化 Unmarshaller(xml轉java)
		Unmarshaller unmarshaller=context.createUnmarshaller();
		String xml="<people><name>xml convert into java</name></people>";
		People p1=(People)unmarshaller.unmarshal(new StringReader(xml));
		System.out.println(p1.name);
	}

}
三、運行結果
//結果一(代碼如上)
//people類註解了@XmlAccessorType(XmlAccessType.PROPERTY)說明 屬性 才能被轉換成 xml 中的標籤。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><people/>
JAVA Convert XML

//結果二:(peopel類註解稍改)
//people類註解了@XmlAccessorType(XmlAccessType.FIELD)字段也能轉
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><people><name>JAVA Convert XML</name></people>
xml convert into java

二、創建具有屬性的類

一、創建people1類
package xmltojava;

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

@XmlRootElement
//@XmlAccessorType(XmlAccessType.FIELD)
@XmlAccessorType(XmlAccessType.PROPERTY)
public class People1 {
	private String name;
	
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
}
二、創建互轉測試類
package xmltojava;

import java.io.StringReader;

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

public class JavaToXml1 {
	public static void main(String[] args) throws JAXBException{
		
		JAXBContext context=JAXBContext.newInstance(People1.class);
		
		Marshaller marshaller=context.createMarshaller();
		
		People1 p=new People1();
		p.setName("java convert into xml");
		
		marshaller.marshal(p,System.out);
		System.out.println();
		
		//給marshaller對象添加屬性,格式化xml
		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
		//更改xml輸出xml字符編碼
		p.setName("java 轉 xml");
		marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
		//添加屬性JAXB_SCHEMA_LOCATION
		marshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, 
	"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd");
		marshaller.marshal(p, System.out);
		System.out.println();
		
		Unmarshaller unmarshaller=context.createUnmarshaller();
		
		String xml="<people1><name>xml convert into java</name></people1>";
		//此處name時peopel類的屬性(有set|get方法)
		People1 p1=(People1) unmarshaller.unmarshal(new StringReader(xml));
		System.out.println(p1.getName());
			
	}

}
三、運行結果

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><people1><name>java convert into xml</name></people1>
<?xml version="1.0" encoding="GBK" standalone="yes"?>
<people1 xsi:noNamespaceSchemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <name>java 轉 xml</name>
</people1>

xml convert into java

注:xsi:schemaLocation其實是Namespace爲”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd“裏的schemaLocation屬性,它定義了XML
Namespace和對應的XSD(Xml Schema
Definition)文檔的位置的關係。在Spring的配置文件中,時常能見到這個屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章