SAX解析xml文件

来源:互联网 发布:it时代是什么 编辑:程序博客网 时间:2024/04/28 09:59
public class XMLsaxActivity extends Activity {    /** Called when the activity is first created. */Button sax_xml = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                sax_xml = (Button)findViewById(R.id.sax_xml);        sax_xml.setOnClickListener(new MyContentHandlerListener());    }        class MyContentHandlerListener implements OnClickListener{@Overridepublic void onClick(View v) {try {DownloadHelper dh = new DownloadHelper();String strFile = dh.download("http://10.0.2.2:8080/test.xml");System.out.println(strFile);SAXParserFactory spfactory = SAXParserFactory.newInstance();  XMLReader reader = spfactory.newSAXParser().getXMLReader();reader.setContentHandler(new MyContentHandler());reader.parse(strFile);} catch (Exception e) {e.printStackTrace();}   }        }}


public class DownloadHelper {URL url = null;HttpURLConnection httpURLConnection = null;String line = null;StringBuffer sb = new StringBuffer();BufferedReader br = null;public String download(String newUrl){try {url = new URL(newUrl);httpURLConnection = (HttpURLConnection)url.openConnection();br =  new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));while((line=br.readLine())!=null){sb.append(line);System.out.println(line);}} catch (IOException e) {e.printStackTrace();}return null;}}

public class MyContentHandler extends DefaultHandler {String servlet,servlet_name,servlet_class;String tagName;@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {//super.characters(ch, start, length);System.out.print(ch.toString());}@Overridepublic void endDocument() throws SAXException {System.out.println("-----------end-------------");}@Overridepublic void endElement(String namespaceUrl, String localName, String qName)throws SAXException {//super.endElement(namespaceUrl, localName, qName);System.out.println(localName);}@Overridepublic void startDocument() throws SAXException {System.out.println("-----------start-------------");}@Overridepublic void startElement(String namespaceUrl, String localName, String qName,Attributes attributes) throws SAXException {//super.startElement(uri, localName, qName, attributes);tagName = localName;System.out.print(tagName);if(tagName.equals("servlet_class")){for(int i = 0; i < attributes.getLength();i++){System.out.println(attributes.getLocalName(i)+"="+attributes.getValue(i));}}}}

在这里需要注意的就是SAX在解析文档的时候根据顺序:

startDocument()---startElement()----characters()---eneElement()---characters()----startElement()----characters()---endElement()---等这样循环的,直到EndDocument()结束整个文档的解析。在执行完endElement()之后并不是完成这个标签的解析,而是继续解析内容,但是返回的是空格(不是null),再继续startElement() 。这个在项目开发中需要注意的