准备介绍一个操作xml的工具,由于代码太长,逻辑有点复杂。所以分2篇文章介绍,这里先介绍本工具实现的主要功能。
本工具在webservice系统间通信时尤为有用。
其主要有2个用途:
1) 根据xml字符串转相应java对象,支持list属性层级和普通属性层级
2) 根据java对象转相应的xml字符串,支持嵌套转xml
先给出简单的说明例子,比如:
假设我们已经定义了一个学生类Student,有属性id,name,bir,age及相应的get,set方法,有相应xml字符串,
"<Student age=/"10/">"+
"<NAME>hhh</NAME>"+
"<ID></ID>"+
"<BIR></BIR>"+
"</Student>"
现在来看我们的简单工具是怎么使用的?,够不够简单?呵呵
用途1: 对于给定xml转java对象
使用代码如下,
String xml="<Student age=/"10/">"+
"<NAME>hhh</NAME>"+
"<ID></ID>"+
"<BIR></BIR>"+
"</Student>";
Student s=new Student();
//共有3个参数
s = (Student) XmlUtil.createTarget(xml, s, null);
System.out.println(s.toString());
参数说明,参数1,2很明了。
参数3:截断表达式字符串,有时xml协议会有许多的头结点信息,我们可以直接从我们关心的节点开始截取进行
解析成java对象 举个例子如下,
String xml="<XML><DATA><Student age=/"10/">"+
"<NAME>hhh</NAME>"+
"<ID></ID>"+
"<BIR></BIR>"+
"</Student>"+
"</DATA></XML>";
Student s=new Student();
//共有3个参数
s = (Student) XmlUtil.createTarget(xml, s, "//DATA/");//表示截取DATA结点下的xml字符串转对象
System.out.println(s.toString());
用途2:对于给对象,将其转化为具有层级关系的xml字符串,并且属性age属于相应的节点
Student s=new Student();
s.setAge("10");
s.setName("hhh");
String xml = XmlUtil.createXml(s);
System.out.println(xml);
结果同上的xml。
工具不错吧,你只需提供你的javabean和xml,那么利用本工具只需一行代码即可完成相互转化。
完整的测试代码如下(xml操作工具分享-实现篇)
import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.*; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import XMLHandler.xmlopt.util.XmlUtil; import XMLHandler.xmlutil.test.School; public class TestXml { @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Ignore @Test public void testObj2Xml() { Student s=new Student(); s.setAge("10"); s.setName("hhh"); String xml = XmlUtil.createXml(s); System.out.println(xml); } //@Ignore @Test public void testXml2Obj() throws UnsupportedEncodingException { String xml="<xml><Student age=/"10/">"+ "<NAME>hhh</NAME>"+ "<ID></ID>"+ "<BIR></BIR>"+ "</Student></xml>"; Student s=new Student(); s = (Student) XmlUtil.createTarget(xml, s, "//xml/"); //如果xml节点没有,第三个参数需要给null值 System.out.println(s.getName()); } }