用的是jdk自带的javax.xml.bind.JAXBContext将对象和xml字符串进行相互转换。
如果对要生成的 xml 格式有点些许的限制,就会对生成xml的对象就需要进行些许控制,控制对象的一个最可行的办法就是用注解。
(jdk 1.6 api:
http://www.cs.uic.edu/~mcpc/Java_Docs/api/index.html?javax/xml/bind/JAXBContext.html
)
http://www.cs.uic.edu/~mcpc/Java_Docs/api/index.html?javax/xml/bind/JAXBContext.html
)
比较常用的几个:
@XmlRootElement:根节点
@XmlAttribute:该属性作为xml的attribute
@XmlElement:该属性作为xml的element,且可以增加属性(name=”NewElementName”),那么生成的xml串的elment的标签是NewElementName
示例:
-
package
test;
-
-
import
java.io.StringWriter;
-
-
import
javax.xml.bind.JAXBContext;
-
import
javax.xml.bind.JAXBException;
-
import
javax.xml.bind.Marshaller;
-
-
import
test.bean.EleClassA;
-
import
test.bean.EleClassB;
-
import
test.bean.RootClass;
-
-
public
class
Test1 {
-
-
public
static
void
main(String[] args) {
-
RootClass rc =
new
RootClass();
-
EleClassA a =
new
EleClassA();
-
EleClassB b =
new
EleClassB();
-
-
a.setAttrC(
“attrc”
);
-
a.setEleA(
“eleA”
);
-
a.setEleB(
“eleB”
);
-
-
b.setAttrPassword(
“attrPassword”
);
-
b.setAttrUserName(
“attrUsrName”
);
-
b.setEleCode(
“eleCode”
);
-
-
rc.setA(a);
-
rc.setB(b);
-
rc.setRoot(
“root”
);
-
rc.setRootA(
“rootA”
);
-
-
-
JAXBContext context;
-
try
{
-
context = JAXBContext.newInstance(RootClass.
class
);
-
Marshaller mar = context.createMarshaller();
-
mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
true
);
-
mar.setProperty(Marshaller.JAXB_ENCODING,
“UTF-8”
);
-
-
StringWriter writer =
new
StringWriter();
-
-
mar.marshal(rc, writer);
-
-
System.out.println(writer.toString());
-
}
catch
(JAXBException e) {
-
e.printStackTrace();
-
}
-
-
}
-
}
-
-
-
package
test.bean;
-
-
import
javax.xml.bind.annotation.XmlElement;
-
import
javax.xml.bind.annotation.XmlRootElement;
-
-
@XmlRootElement
(name=
“rootclass”
)
-
public
class
RootClass {
-
-
private
EleClassA a;
-
private
EleClassB b;
-
private
String root;
-
private
String rootA;
-
-
@XmlElement
(name=
“eleClassA”
)
-
public
EleClassA getA() {
-
return
a;
-
}
-
public
void
setA(EleClassA a) {
-
this
.a = a;
-
}
-
@XmlElement
(name=
“EleclassA”
)
-
public
EleClassB getB() {
-
return
b;
-
}
-
public
void
setB(EleClassB b) {
-
this
.b = b;
-
}
-
public
String getRoot() {
-
return
root;
-
}
-
public
void
setRoot(String root) {
-
this
.root = root;
-
}
-
public
String getRootA() {
-
return
rootA;
-
}
-
public
void
setRootA(String rootA) {
-
this
.rootA = rootA;
-
}
-
-
}
-
-
-
package
test.bean;
-
-
import
javax.xml.bind.annotation.XmlAttribute;
-
import
javax.xml.bind.annotation.XmlElement;
-
-
public
class
EleClassA {
-
-
private
String eleA;
-
private
String eleB;
-
-
private
String attrC;
-
-
@XmlElement
-
public
String getEleA() {
-
return
eleA;
-
}
-
-
public
void
setEleA(String eleA) {
-
this
.eleA = eleA;
-
}
-
-
@XmlElement
(name=
“elebnewname”
)
-
public
String getEleB() {
-
return
eleB;
-
}
-
-
public
void
setEleB(String eleB) {
-
this
.eleB = eleB;
-
}
-
-
@XmlAttribute
()
-
public
String getAttrC() {
-
return
attrC;
-
}
-
-
public
void
setAttrC(String attrC) {
-
this
.attrC = attrC;
-
}
-
-
}
-
-
-
package
test.bean;
-
-
import
javax.xml.bind.annotation.XmlAttribute;
-
import
javax.xml.bind.annotation.XmlElement;
-
-
public
class
EleClassB {
-
-
private
String attrUserName;
-
private
String attrPassword;
-
-
private
String eleCode;
-
-
@XmlAttribute
-
public
String getAttrUserName() {
-
return
attrUserName;
-
}
-
public
void
setAttrUserName(String attrUserName) {
-
this
.attrUserName = attrUserName;
-
}
-
@XmlAttribute
(name=
“password”
)
-
public
String getAttrPassword() {
-
return
attrPassword;
-
}
-
public
void
setAttrPassword(String attrPassword) {
-
this
.attrPassword = attrPassword;
-
}
-
@XmlElement
-
public
String getEleCode() {
-
return
eleCode;
-
}
-
public
void
setEleCode(String eleCode) {
-
this
.eleCode = eleCode;
-
}
-
-
-
}
运行Test1类中main方法,执行结果:
-
<?
xml
version
=
“1.0”
encoding
=
“UTF-8”
standalone
=
“yes”
?>
-
<
rootclass
>
-
<
eleClassA
attrC
=
“attrc”
>
-
<
eleA
>
eleA
</
eleA
>
-
<
elebnewname
>
eleB
</
elebnewname
>
-
</
eleClassA
>
-
<
EleclassA
attrUserName
=
“attrUsrName”
password
=
“attrPassword”
>
-
<
eleCode
>
eleCode
</
eleCode
>
-
</
EleclassA
>
-
<
root
>
root
</
root
>
-
<
rootA
>
rootA
</
rootA
>
-
</
rootclass
>
版权声明:本文为liushengbaba原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。