这几天一直在研究java网络编程的一些问题,在一些论坛上看到这样一个知识点,就是对服务器端的xml文件的解析。刚开始的时候还是有点困惑的,后
来就慢慢的想通了,下面就让我具体的讲解一下吧。
既然讲到java的网络编程,就必须讲一下java中如何通过http协议获取服务端的信息。在所有的通过http协议向服务器发出请求获取资源的方有两种
POST和GET方式,具体两种方式的不同以及有关http协议此处不再解释。接下来我们详细讲解一下如何通过java的http编程获取服务器端的资源。
在java中我们可以找到这样一个类 URL,类 URL代表一个统一资源定位符,它是指向互联网“资源”的指针,资源可以是简单的文件或目录,也可以是
对更为复杂的对象的引用,具体的方法可以看URL的构造方法,在这里我们用最为简单的:
String Path = ""; URL url = new URL(Path ) ;
Path是一个文档的具体地址,在下面就是一个XML文件的具体地址
这样我们就可以获取了一个URL对象,接下来我们可以通过URL中的openConnection() 方法获取一个到URl所引用的远程对象的链接,代码如下:
if(url!=null){ HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); }
接下来我们要设置请求数据的方式以及请求的响应时间,代码如下:
httpURLConnection.setRequestMethod("GET"); httpURLConnection.setReadTimeout(3000);
应为我们是要从服务器段获取数据,所以我们要获取输入流,这样就能读取服务端的数据,在这之前,我们要使用这个方法:
httpURLConnection.setDoInput(true);
所有的准备工作做好了,现在我们要获取输入流了,在这个时候我们要先判断一下服务器端 返回的状态码,200表示正常,代码如下:
if(httpURLConnection.getResponseCode()==200){ inputStream = httpURLConnection.getInputStream(); }
这样我们就可以从服务器端获取到了输入流了,接下来只要将输入流写到输出流就行了,此处不再赘述。下面让我们进入正题,对XML文档的解析。
先看这样的一个XML文件:
<Persons> <Person id=12> <name>田佳伟</name> <age>22</age> </Person> <Person id=13> <name>戴洪涛</name> <age>24</age> </Person> </Persons>
接下来我们就通过分别通过SAX ,Pull,DOM技术对它进行解析。
先说明一下这三中技术的差别,SAX技术不需要知道所要解析的文档标签,直接进行解析,而其他两种就需要知道文档标签才可以。先让我们看一下SAX
技术对XML文件的解析,
在java中有这样的一个类DefaultHandler,我们可以使用这个类对XML文档进行SAX技术的解析
在类DefaultHandler中有这样几个方法:
//接受文档是自动调用 startDocument() ; // 接收元素开始的通知,自动调用 startElement(String uri, String localName, String qName, Attributes attributes) ; //接收元素中字符数据的通知。 characters(char[] ch, int start, int length) ; //接收元素结束的通知。 endElement(String uri, String localName, String qName);
下面通过具体代码解释一下如何使用DefaultHandler类
首先我们要定义这样几个属性:
//定义一个hashmap,用于装对应的键值和键名 private HashMap<String , String > map = null; //定义一个装map的list private List<HashMap<String , String >>list = null; //定义当前的标签的名称 private String CurrentTag; //定义当前的标签的内容 private String CurrentValue; //定义节点的名称 private String nodeName;
然后就要调用startDocument()方法了,在定义这个方法时我们要实例化list.代码如下:
@Override public void startDocument() throws SAXException { //开始读取时创建list list = new ArrayList<HashMap<String,String>>(); }
然后就是调用startElement(String uri, String localName, String qName, Attributes attributes) 方法,就相当于读到上面XML文件的
Person节点时,这个时候要先判断一下节点,然后实例化map,在判断其是否有值:如id,同时这个时候要给CurrentTag赋值了具体代码如下:
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if(qName.equals(nodeName)){ map = new HashMap<String, String>(); } if(map!=null&&attributes!=null){ for(int i=0;i<attributes.getLength();i++){ map.put(attributes.getQName(i), attributes.getValue(i)); } } CurrentTag = qName; }
然后就要读到具体的内容了,调用这个方法characters(char[] ch, int start, int length) ;具体代码如下:
@Override public void characters(char[] ch, int start, int length) throws SAXException { if(CurrentTag!=null&&map!=null){ CurrentValue = new String(ch,start,length); } if(CurrentValue!=null&&!CurrentValue.equals("")){ map.put(CurrentTag, CurrentValue); } CurrentTag = null; CurrentValue = null; }
这个方法会读完所有的数据,这样就会读到尾节点了,于是就要调用这个方法了:
endElement(String uri, String localName, String qName);
那么,我们就应该把map添加到list中,同时初始化一下map,具体代码如下:
@Override public void endElement(String uri, String localName, String qName) throws SAXException { if(qName.equals(nodeName)){ list.add(map); map=null; } }
在上面我们要通过构造函数传一个节点过去。
这样我们就将xml的文件解析了,然后就要用到saxparser对xml进行解析了,先从saxParser工厂中获取saxparser,然后再进行解析:
具体代码如下:
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser saxParser = saxParserFactory.newSAXParser();
接下来调用这个方法进行解析
saxParser.parse(InputStream, DefaultHandle);
以上第一个参数是我们在之前讲过的获取的输入流,后面的参数是刚刚讲过的实例化的对象。
这样就可义解析服务器端的xml文件。
相关推荐
使用环境eclipse4.8,jdk1.8 使用sax,pull,dom4j解析XML,对xml的简单解析,sax,pull,dom4j的简单使用
pull,sax,dom,解析XML的例子:各一个
读取和解析xml文件
Android 中利用SAX ,Dom,pull解析 XML 文件代码 每种方式都介绍了代码,具体的文档在个人博客: http://blog.csdn.net/blueskydyliu/article/details/7055311 中介绍了。
利用SAX、DOM和Pull实现对schools.xml的解析,并进行单元测试 利用Pull实现schools.xml的创建
Java解析XML的三种方式 Ø Android中,解析Xml数据的三种方式: Ø 1、DOM(org.w3c.dom) Ø “文档对象模型”方式,解析完的Xml将生成一个树状结构的对象。 Ø 2、SAX(org.xml.sax) Ø SimpleAPI for XML,以事件的...
SAX、PULL、DOM解析XML
android 应用程序 做的 解析xml 用了三种技术 sax dom pull 三种解析xml的常用技术 另外还有一些怎么快速的让指定文件读取到xml文件中
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
Android XML解析 SAX DOM Pull 以person类为例进行解析,适合初学者学习
NULL 博文链接:https://myclover.iteye.com/blog/1044571
android解析XML总结(SAX、Pull、Dom三种方式),代码实现
提供了android中使用dom、pull、sax三种方式进行xml解析,xml文件放置在assets文件夹下,view绑定使用butterknife
三种XML的解析方法,DOM SAX PULL程序例子代码,希望对您有帮助。
详细的介绍了Android三种解析XML的方法。
支持SAX解析XML文件,DOM解析XML文件,Pull解析器解析XML文件,Pull生成XML文件,JAVA和Kotlin两种语言编写
XML的三种解析方式,pull解析,Sax解析,DOM解析
此示例介绍了xml的三种解析方式,包括SAX解析,dom解析,pull解析 并介绍了读取文件的方法,怎么写入xml文件等内容,希望对您有所帮助,谢谢。
三种方式解析XML 提供创建XML方法 本地三种方式解析 网络三种方式解析 一共7个 需要的下 带文件编码识别 相当强大哦
XML在Android中是非常常见用来保存数据的文件,解析的方法也很多,如:DOM、SAX、PULL,其中PULL是Android自带的解析XML方法