XML操作

来源:互联网 发布:人可以有多色 知乎 编辑:程序博客网 时间:2024/06/17 03:09

引入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


原创粉丝点击