加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

获取服务器的xml文件并解析

发布时间:2020-12-16 05:15:13 所属栏目:百科 来源:网络整理
导读:获取服务器上的文件,在开发过程中应该是不陌生的一中操作,可以说是频繁的不能在频繁了,我使用的是Android应用去获取服务器上的文件,这里我也就是将这些代码保存在这,方便以后忘记的时候,回头还有得看,里面的命名是自己随便弄的,英语不好,不知道写什

获取服务器上的文件,在开发过程中应该是不陌生的一中操作,可以说是频繁的不能在频繁了,我使用的是Android应用去获取服务器上的文件,这里我也就是将这些代码保存在这,方便以后忘记的时候,回头还有得看,里面的命名是自己随便弄的,英语不好,不知道写什么。下面用代码说话还是比较实在

实现效果图:

获取网络数据,这里用的HttpClient方式来请求网络数据,

public class RequestData {
	/**
	 * get请求
	 * @throws Exception 
	 */
	public static InputStream getRequest(String path) throws Exception{
		//创建HttpClient对象
		HttpClient client=new DefaultHttpClient();
		//创建get请求
		HttpGet get=new HttpGet(path);
		//执行请求并获取响应
		HttpResponse response=client.execute(get);
		//如果响应码为200就表示请求成功
		if(response.getStatusLine().getStatusCode()==200){
			//获取InputStream对象
			InputStream is=response.getEntity().getContent();
			return is;
		}
		return null;
	}
}

解析xml工具类,用的是DOM解析

public class ParseXmlService {
	/**
	 * 解析xml
	 * @throws Exception 
	 */
	public static HashMap<String,String> parseXml(InputStream is) throws Exception{
		//创建HashMap对象
		HashMap<String,String> map=new HashMap<String,String>();
		//创建解析器工厂类
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		//创建DocumentBuilder对象
		DocumentBuilder builder=factory.newDocumentBuilder();
		//创建Document对象
		Document document=builder.parse(is);
		//获取根节点
		Element root=document.getDocumentElement();
		//获取所有子节点
		NodeList childNodes=root.getChildNodes();
		//变量子节点
		for(int i=0;i<childNodes.getLength();i++){
			Node childNode=childNodes.item(i);
			if(childNode.getNodeType()==Node.ELEMENT_NODE){
				//获取节点
				Element childElement=(Element) childNode;
				//版本号
				if("version".equals(childElement.getNodeName())){
					map.put("version",childElement.getFirstChild().getNodeValue());
				}
				//名称
				else if("name".equals(childElement.getNodeName())){
					map.put("name",childElement.getFirstChild().getNodeValue());
				}
				//下载路径
				else if("url".equals(childElement.getNodeName())){
					map.put("url",childElement.getFirstChild().getNodeValue());
				}
			}
		}
		return map;
	}
}


这两个类就完成了请求数据与解析,接下来就在主程序中将解析的信息显示到界面的操作

public class MainActivity extends Activity {
	//声明控件对象
	private Button parseXml;
	private TextView info;
	
	//构建请求路径
	String path="http://192.168.1.19:8080/zeng/version.xml";
	//创建消息处理机制
	private Handler handler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 0x11:
				//获取HashMap对象
				HashMap<String,String> map=(HashMap<String,String>) msg.obj;
				//设置TextView信息
				info.setText("版本号:"+map.get("version")+"n应用名称:"+map.get("name")+"n下载路径:"+map.get("url"));
				break;

			default:
				break;
			}
		};
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//设置无标题
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		//获取控件对象
		parseXml=(Button) this.findViewById(R.id.btn_parse);
		info=(TextView) this.findViewById(R.id.tv_info);

		//为按钮绑定点击事件
		parseXml.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				new Thread(){
					public void run() {
						//获取InputStream对象
						InputStream is;
						try {
							is = RequestData.getRequest(path);
							//解析获取的xml
							HashMap<String,String> map=ParseXmlService.parseXml(is);
							//创建Message
							Message msg=new Message();
							msg.what=0x11;
							msg.obj=map;
							//将Message装载到Handler中
							handler.sendMessage(msg);
						} catch (Exception e) {
							e.printStackTrace();
						}
					};
				}.start();
			}
		});
	}
}

当然还有一个最中要的,就是要到AndroidManifest.xml文件中配置访问网络的权限

<uses-permission android:name="android.permission.INTERNET"/>

这样才算的完成整个操作,代码就这么多咯,将就将就看,呵呵

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读