1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信公众号开发(公交线路查询-JAVA

微信公众号开发(公交线路查询-JAVA

时间:2020-06-19 18:37:52

相关推荐

微信公众号开发(公交线路查询-JAVA

一、Dom4j的使用 在介绍公交线路开发之前,先简单介绍下Dom4j的使用,因为公交线路查询引用的是爱帮公交api,调用结果为xml格式文件,故用到了Dom4j这个包,当然还有其他的包来读取xml文件,如XStream等,详见柳峰老师《微信公众平台应用开发方法、技巧与案例》一书,有详细介绍。

这里先给一个样例代码,供大家参考:

1.利用Dom4j创建xml文件

Java代码 packageorg.elvis.course.dom4j; importjava.io.FileOutputStream; importorg.dom4j.Attribute; importorg.dom4j.Document; importorg.dom4j.DocumentHelper; importorg.dom4j.Element; importorg.dom4j.io.OutputFormat; importorg.dom4j.io.XMLWriter; publicclassMyDom4j {publicstaticvoidmain(String[] args){//创建文档 Document document = DocumentHelper.createDocument(); //设置文档DocType,这里为了举例,添加加hibernate的DocType document.addDocType("hibernate-configuration", "-//Hibernate/Hibernate Configuration DTD 3.0//EN", "/hibernate-configuration-3.0.dtd"); // 文档增加节点,即根节点,一个文档只能有一个根节点,多加出错 Element root = document.addElement("skills"); // 添加注释 root.addComment("第一个技能"); // 根节点下添加节点 Element first = root.addElement("skill"); // 节点添加属性 first.addAttribute("name","独孤九剑"); // 节点下添加节点 Element info = first.addElement("info"); // 节点设置内容数据 info.setText("为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。"); // 同理增加其他节点,内容,属性等 Element second = root.addElement("skill"); second.addAttribute("name","葵花宝典"); Element info2 = second.addElement("info"); info2.setText("宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。"); /** * 第二种方法增加节点,内容,属性等。先创建节点,属性,然后使用add加入。 */ // 创建节点 Element third = DocumentHelper.createElement("skill"); // 将节点加入到根节点中 root.add(third); // 创建属性,第一个参数指定了拥有者,也可以为null,指定拥有者 Attribute name = DocumentHelper.createAttribute(third,"name","北冥神功"); // 将属性加入到节点上 third.add(name); // 创建子节点并加入到节点中 Element info3 = DocumentHelper.createElement("info"); info3.setText("逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。"); third.add(info3); try{// 创建格式化类 OutputFormat format = OutputFormat.createPrettyPrint(); // 设置编码格式,默认UTF-8 format.setEncoding("UTF-8"); // 创建输出流,此处要使用Writer,需要指定输入编码格式,使用OutputStream则不用 FileOutputStream fos =newFileOutputStream("d:/skills.xml"); // 创建xml输出流 XMLWriter writer =newXMLWriter(fos, format); // 生成xml文件 writer.write(document); writer.close(); }catch(Exception e) {e.printStackTrace(); } } } 2.读取刚才创建的skills.xml文件

Java代码 packageorg.elvis.course.dom4j; importjava.io.File; importjava.util.Iterator; importjava.util.List; importorg.dom4j.Document; importorg.dom4j.DocumentException; importorg.dom4j.Element; importorg.dom4j.io.SAXReader; importorg.xml.sax.SAXException; publicclassReadDom4j {/** * @param args * @throws SAXException */ publicstaticvoidmain(String[] args)throwsSAXException {// TODO Auto-generated method stub try{SAXReader reader =newSAXReader(); //读取刚才创建的XML文件 reader.setFeature("/xml/features/nonvalidating/load-external-dtd",false); Document document = reader.read(newFile("d:/skills.xml")); //取根节点 Element root = document.getRootElement(); //取二级节点 Element skills =root.element("skill"); //取三级节点 List<Element> urlList = root.elements("skill"); //取节点为Info的值 String ss1 = urlList.get(0).element("info").getText(); String ss = skills.element("info").getText(); System.out.println(ss); System.out.println(ss1); }catch(DocumentException e) {// TODO Auto-generated catch block e.printStackTrace(); } } } Dom4j的Jar包:

二、公交线路查询开发

1.主要代码

Java代码 packageorg.elvis.yy.gongjiao; importjava.io.InputStream; importjava.io.UnsupportedEncodingException; .HttpURLConnection; .URL; importjava.util.List; importorg.dom4j.Document; importorg.dom4j.Element; importorg.dom4j.io.SAXReader; importorg.elvis.yy.yinyue.Music; publicclassAibanggongjiaoService {/** * 爱帮公交线路查询 * 根据城市和关键字(线路)查询 * @param city城市 * @param q线路 * @return gongjiao */ publicstaticgongjiao searchGongjiao(String city, String q) {// 爱帮api地址 String requestUrl ="/bus/lines?app_key=b7fb1e41aa104e9c24b81894d8e5ab48&city={city}&q={q}"; // 对城市和线路进行编码 requestUrl = requestUrl.replace("{city}", urlEncodeUTF8(city)); requestUrl = requestUrl.replace("{q}", urlEncodeUTF8(q)); // 处理名称、作者中间的空格 requestUrl = requestUrl.replaceAll("\\+","%20"); // 查询并获取返回结果 InputStream inputStream = httpRequest(requestUrl); // 从返回结果中解析出gongjiao gongjiao gj = parseGongjiao(inputStream); returngj; } /** * UTF-8编码 * * @param source * @return */ privatestaticString urlEncodeUTF8(String source) {String result = source; try{result = .URLEncoder.encode(source,"UTF-8"); }catch(UnsupportedEncodingException e) {e.printStackTrace(); } returnresult; } /** * 发送http请求取得返回的输入流 * * @param requestUrl 请求地址 * @return InputStream */ privatestaticInputStream httpRequest(String requestUrl) {InputStream inputStream =null; try{URL url =newURL(requestUrl); HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); httpUrlConn.setDoInput(true); httpUrlConn.setRequestMethod("GET"); httpUrlConn.connect(); // 获得返回的输入流 inputStream = httpUrlConn.getInputStream(); }catch(Exception e) {e.printStackTrace(); } returninputStream; } /** * 解析音乐参数 * * @param inputStream 百度音乐搜索API返回的输入流 * @return Music */ @SuppressWarnings("unchecked") privatestaticgongjiao parseGongjiao(InputStream inputStream) {gongjiao gj =null; try{// 使用dom4j解析xml字符串 SAXReader reader =newSAXReader(); Document document = reader.read(inputStream); // 得到xml根元素 Element root = document.getRootElement(); // result_num表示查询得公交路线数量 String num = root.element("result_num").getText(); // 当公交线路大于0时 if(!"0".equals(num)) {// 公交信息根节点 List<Element> lines = root.elements("lines"); List<Element> line = lines.get(0).elements("line"); String name = line.get(0).element("name").getText(); String info = line.get(0).element("info").getText(); String stats = line.get(0).element("stats").getText(); String f_stats = line.get(1).element("stats").getText(); gj =newgongjiao(); //获取公交始发站和终点站信息 gj.setName(name); //获取公交价格 gj.setJiage(info); //获取公交正向的各个站点 gj.setZhengxiang(stats); //获取公交反向的信息 gj.setFanxiang(f_stats); } }catch(Exception e) {e.printStackTrace(); } returngj; } // 测试方法 publicstaticvoidmain(String[] args) {gongjiao gj = searchGongjiao("营口","206路"); System.out.println("公交名称:"+ gj.getName()); System.out.println("公交价格:"+ gj.getJiage()); System.out.println("正向公交信息:"+ gj.getZhengxiang()); System.out.println("反向公交信息:"+ gj.getFanxiang()); } }

gongjiao类

package org.elvis.yy.gongjiao;

public class gongjiao {

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getJiage() {

return jiage;

}

public void setJiage(String jiage) {

this.jiage = jiage;

}

public String getZhengxiang() {

return zhengxiang;

}

public void setZhengxiang(String zhengxiang) {

this.zhengxiang = zhengxiang;

}

public String getFanxiang() {

return fanxiang;

}

public void setFanxiang(String fanxiang) {

this.fanxiang = fanxiang;

}

private String name;

private String jiage;

private String zhengxiang;

private String fanxiang;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。