本文最后更新于:2021年6月15日 晚上
前言 在看本篇文章之前,先探讨一下常见的两种数据格式,一种是 JSON,另外一种就是 XML,在日常工作中不可避免地都会对这两种数据格式进行接触。
JSON 格式灵活,有大量的支持库,操作起来极为方便;而 XML 操作起来就不是很顺手了。 JSON 格式灵活的就会导致结构不够统一规范,而 XML 有了 XML Schema 以及 DTD 约束进行校验,也减少了数据格式不规范的问题。
对于以上这点,个人是深有体会,因为在工作中需要经常和其他公司的技术打交道。公司合作有内容输出以及内容引入两种,内容引入就是去抓取其他公司的授权接口内容,文档制定的数据格式是 JSON 的,但是可能对方参照我方文档进行接口开发时,会忽略掉一些事项,比如数据类型、时间格式等等,造成我方抓取之后,出现错误的情况;
而在和百度内容输出进行接口对接的时候,百度需要 XML 格式的数据,如果我方接口中的数据不符合对方的 XML 约束的话,对方就能马上停止抓取,反馈问题,由此避免错误情况的发生。
平时为了图方便,很多接口都使用 JSON,对于 XML 也比较生疏,但还是不可避免接触到使用,开发过微信公众号的都知道,微信接口基本都使用的是 XML。在开发了微信图文回复之后,需要组装 XML 发送给微信服务器,可能有人说,那用字符串拼装不也是可以的么,干嘛那么麻烦非要用 DOM4J 呢?确实公司中一些项目的微信支付,也使用的是字符串拼接 XML 的方式,但是多掌握一些技术也并不是什么坏事!
环境准备 首先引入 dom4j 依赖
<dependency > <groupId > org.dom4j</groupId > <artifactId > dom4j</artifactId > <version > 2.1.0</version > </dependency >
需求 接到需求,要求用户发送作品名称,自动图文回复搜索相关作品,微信的接口是这样的:
需要的 XML 文档格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <xml > <ToUserName > <![CDATA[toUser]]></ToUserName > <FromUserName > <![CDATA[fromUser]]></FromUserName > <CreateTime > 12345678</CreateTime > <MsgType > <![CDATA[news]]></MsgType > <ArticleCount > 2</ArticleCount > <Articles > <item > <Title > <![CDATA[title]]></Title > <Description > <![CDATA[description]]></Description > <PicUrl > <![CDATA[picurl]]></PicUrl > <Url > <![CDATA[url]]></Url > </item > <item > <Title > <![CDATA[title]]></Title > <Description > <![CDATA[description]]></Description > <PicUrl > <![CDATA[picurl]]></PicUrl > <Url > <![CDATA[url]]></Url > </item > </Articles > </xml >
需求实现 其实这个接口也就是组装数据,然后发送给微信就可以了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 public static void main (String[] args) { Document doc = DocumentHelper.createDocument(); Element rootXML = doc.addElement("xml" ); rootXML.addElement("ToUserName" ).addCDATA("toUser" ); rootXML.addElement("FromUserName" ).addCDATA("fromUser" ); rootXML.addElement("CreateTime" ).setText("12345678" ); rootXML.addElement("MsgType" ).addCDATA("news" ); rootXML.addElement("ArticleCount" ).setText("2" ); Element subElement = DocumentHelper.createElement("Articles" ); for (int i = 0 ; i < 2 ; i++) { Element itemElement = DocumentHelper.createElement("item" ); itemElement.addElement("Title" ).addCDATA("title" ); itemElement.addElement("Description" ).addCDATA("description" ); itemElement.addElement("PicUrl" ).addCDATA("picurl" ); itemElement.addElement("Url" ).addCDATA("url" ); subElement.add(itemElement); } rootXML.add(subElement); System.out.println(rootXML.asXML()); }
小结 最近博客文章都是个人的总结性文章,没有涉及什么难的技术,希望对你有所帮助!