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的配置文件中,時常能見到這個屬性。