javaXML文件解析(一) SAX解析
2016-12-14 15:11
393 查看
当我们与互联网交互时我们需要解析从网络上访问到的资源,例如XML文件,本例将详细介绍关于XML文件解析最常用的几种方法
SAX解析
当读取到文档(Document)开始,结束,元素(Element)开始结束时,调用相应的时事件处理函数,然后继续同样的操作,解析速度快,占用内存少,以流的方式解析,速度快,但是没遇到一类的xml文档就需要新的适合的XML文档解析类
SAX解析xml数据是以事件驱动的,不需要解析整个文档,在处理过程中判断读到的字符是否符合一定的规则,调用相应的回调方法
步骤1.继承DefaultHandler类,重写必要的方法
访问服务器上的xml文档,并以流的方式返回
//最后在一个测试类中调用 path路径读者写自己的就ok了
public class test {
public static void main(String[] args) throws ParserConfigurationException, SAXException {
String path = “http://..888:8080/SAX_Xml/person.xml”;
try {
InputStream inputStream = HttpUtils.getXML(path);
String person = “person”;
List
SAX解析
当读取到文档(Document)开始,结束,元素(Element)开始结束时,调用相应的时事件处理函数,然后继续同样的操作,解析速度快,占用内存少,以流的方式解析,速度快,但是没遇到一类的xml文档就需要新的适合的XML文档解析类
SAX解析xml数据是以事件驱动的,不需要解析整个文档,在处理过程中判断读到的字符是否符合一定的规则,调用相应的回调方法
步骤1.继承DefaultHandler类,重写必要的方法
public class MyHandler extends DefaultHandler { private LinkedHashMap<String, String> map = null;//存储单个解析出来的完整对象 private List<LinkedHashMap<String,String>> list = null;//存储解析出来的所有对象 private String currentTag = null;//正在解析元素的标签 private String currentValue = null;//解析当前元素的值 private String nodeName = null;//解析当前节点的名称 public MyHandler(String nodeName) { this.nodeName = nodeName; } public List<LinkedHashMap<String, String>> getList() { return list; } //解析文档开始时调用,用来完成一些初始化工作 @Override public void startDocument() throws SAXException { System.out.println("xml文档解析开始"); list = new ArrayList<LinkedHashMap<String,String>>(); } //每遇到一个开始标签时,便触发 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if(nodeName.equals(qName)){ map = new LinkedHashMap<String,String>(); } //解析标签属性的名字和值加入到map当中去 if(attributes!= null&&map!=null){ for(int i = 0;i<attributes.getLength();i++){ map.put(attributes.getQName(i), attributes.getValue(i)); } } currentTag = qName; System.out.println(currentTag); } //用来处理xml文件读取到的内容,读取标签后面的内容, @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.println(start+" "+length); // TODO Auto-generated method stub if(currentTag!=null&&map!=null){ currentValue = new String(ch, start, length); if(currentValue!=null&&!currentValue.trim().equals("")&&!currentValue.trim().equals("\n")){ map.put(currentTag, currentValue); } } currentTag = null; currentValue = null; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub System.out.println(qName); if(qName==nodeName){ list.add(map); map = null;; } } }
//解析xml文档 public class SAXService { public static List<LinkedHashMap<String, String>> readXML(InputStream is,String nodeName) throws ParserConfigurationException, SAXException, IOException{ List<LinkedHashMap<String, String>> list = null; //创建一个SAX解析工厂 SAXParserFactory sap = SAXParserFactory.newInstance(); //得到一个SAX解析器 SAXParser parser = sap.newSAXParser(); //创建一个xml文件解析类 MyHandler handler = new MyHandler(nodeName); //以流的方式解析xml文档 体现了SAX解析xml的流解析特点 parser.parse(is, handler); is.close(); return handler.getList(); } }
访问服务器上的xml文档,并以流的方式返回
public class HttpUtils { public static InputStream getXML(String path) throws IOException{ InputStream inputStream = null; URL url = new URL(path); if(url!=null){ HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); //设置连接超时 httpURLConnection.setConnectTimeout(3000); //设置是否能获得输入流 httpURLConnection.setDoInput(true); //设置请求方式 httpURLConnection.setRequestMethod("GET"); //获取响应码 int code = httpURLConnection.getResponseCode(); inputStream = httpURLConnection.getInputStream(); } return inputStream; } }
//最后在一个测试类中调用 path路径读者写自己的就ok了
public class test {
public static void main(String[] args) throws ParserConfigurationException, SAXException {
String path = “http://..888:8080/SAX_Xml/person.xml”;
try {
InputStream inputStream = HttpUtils.getXML(path);
String person = “person”;
List
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id = "1"> <name>java</name> <age>15</age> </person> <person id = "2"> <name>C#</name> <age>14</age> </person> </persons>
相关文章推荐
- Java解析XML文件的四种方式之SAX解析
- 【JavaWeb】xml文件_SAX解析(xml文件的解析)
- 用XMLEncoder和XMLDecoder创建并解析XML文件Java实例
- java解析xml文件的2种方法:sax,dom
- Java解析XML文件(二)
- java对XML文件的解析、节点的增加、删除操作总结
- java解析xml文件四种方式
- java对xml全面解析,增,删,改,以及将java对象重新编组为xml文件
- Java解析XML文件的四种方法
- java 解析xml文件样例
- java解析xml文件四种方式
- java解析xml文件四种方式
- 使用Java解析XML文件(一)——JDOM篇
- JAVA解析XML文件的四种方法
- 创建并解析XML文件Java实例
- Java解析XML文件(一)
- java - xml文件解析后不能删除
- java解析xml文件四种方式
- java解析xml文件四种方式
- java解析xml文件