引入jar包:
dom4j-1.6.1.jar : 操作XML对象的包
xstream-1.3.1.jar : 读取和解析XML的包
编写message类(普通的DTO):
public class Message {
/*
*按照微信的标准 :正常的需要小写,因为大写的时候注入可能会出现问题
*/
//开发者微信号
private String ToUserName;
//关注者
private String FromUserName;
//信息创建时间
private long CreateTime;
//信息类型
private String MsgType;
//内容
private String Content;
//消息id
private String MsgId;
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public long getCreateTime() {
return CreateTime;
}
public void setCreateTime(long createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
public String getMsgId() {
return MsgId;
}
public void setMsgId(String msgId) {
MsgId = msgId;
}
}
/**
* 将request 接收到的XML格式数据转化为Map* @param inputStream
* @return
* @throws DocumentException
* @throws IOException
*/
public static Map<String, String> toMap(InputStream inputStream) throws DocumentException, IOException {
//获取SAXReader:dom4j-1.6.1.jar 包下的方法
SAXReader reader = new SAXReader();
//获取文档
Document doc = reader.read(inputStream);
//获取根元素
Element root = doc.getRootElement();
@SuppressWarnings("unchecked")
List<Element> elemetns = root.elements();
//遍历封装到map集合
Map<String,String> map = new HashMap<String,String> ();
for(Element e: elemetns){
map.put(e.getName(), e.getText());
}
//关闭流
inputStream.close();
return map;
}
/**
* 将Map转化为对象
* @param xmlMap
* @return
*/
public static Message toMessage(Map<String, String> xmlMap) {
Message message = new Message();
message.setMsgType(xmlMap.get("MsgType"));
message.setFromUserName(xmlMap.get("FromUserName"));
message.setCreateTime(Integer.valueOf(xmlMap.get("CreateTime")));
message.setMsgId(xmlMap.get("MsgId"));
message.setContent(xmlMap.get("Content"));
message.setToUserName(xmlMap.get("ToUserName"));
return message;
}
/**
* 将Message 对象转化为XML
* @param message
* @return
*/
public static String toXml(Message message) {
//获取XStream:xstream-1.3.1.jar包下的方法
XStream stream = new XStream();
//使用别名,作为根元素,否则根元素为包名.类名 即替换根元素名称
stream.alias("xml", message.getClass());
return stream.toXML(message);
}
/**
* 对XML操作演示
* @param args
* @throws DocumentException
*/
public static void main(String[] args) throws DocumentException {
Message message = new Message();
message.setContent("content");
message.setCreateTime(1111111L);
message.setFromUserName("fromdjl");
message.setMsgId("id");
message.setMsgType("text");
message.setToUserName("todjl");
String strXMl = toXml(message);
System.out.println(strXMl);
/**
* 将字符串转化为XML对象
*/
Document doc = DocumentHelper.parseText(strXMl);
Element rootElt = doc.getRootElement(); // 获取根节点
System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
//获取已知根节点下某节点的值
String ToUserName = rootElt.element("ToUserName").getTextTrim();
System.out.println(ToUserName);
//添加子节点
Element myElement = rootElt.addElement("MyEelement");
//添加子节点下的子节点
Element mySonElement = myElement.addElement("MySonElement");
mySonElement.addText("添加的内容");
System.out.println("添加节点后的内容:"+rootElt.asXML());
//删除新增的子节点
rootElt.remove(myElement);
System.out.println("移除后的内容:"+rootElt.asXML());
//遍历
Iterator<Element> it = rootElt.elementIterator();
//解析元素中的信息
while(it.hasNext()){
Element e = it.next();
System.out.println("元素的名称"+e.getName()+";元素的值:"+e.getTextTrim());
}
}
输出信息:
<xml><ToUserName>todjl</ToUserName>
<FromUserName>fromdjl</FromUserName>
<CreateTime>1111111</CreateTime>
<MsgType>text</MsgType>
<Content>content</Content>
<MsgId>id</MsgId>
</xml>
根节点:xml
ToUserName标签的值为:todjl
添加节点后的内容:<xml>
<ToUserName>todjl</ToUserName>
<FromUserName>fromdjl</FromUserName>
<CreateTime>1111111</CreateTime>
<MsgType>text</MsgType>
<Content>content</Content>
<MsgId>id</MsgId>
<MyEelement><MySonElement>添加的内容</MySonElement></MyEelement></xml>
移除后的内容:<xml>
<ToUserName>todjl</ToUserName>
<FromUserName>fromdjl</FromUserName>
<CreateTime>1111111</CreateTime>
<MsgType>text</MsgType>
<Content>content</Content>
<MsgId>id</MsgId>
</xml>
元素的名称ToUserName;元素的值:todjl
元素的名称FromUserName;元素的值:fromdjl
元素的名称CreateTime;元素的值:1111111
元素的名称MsgType;元素的值:text
元素的名称Content;元素的值:content
元素的名称MsgId;元素的值:id