zoukankan      html  css  js  c++  java
  • XML文件解析

    AndroidManifest.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="mars.xml"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".XMLActitity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
        <uses-sdk android:minSdkVersion="4" />	
        <uses-permission android:name="android.permission.INTERNET"/>
    </manifest> 
    

    main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
    <Button
    	android:id="@+id/parseButton"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="开始解析XML"
    	/>
    </LinearLayout>
    

    Mp3Info.java:

    package mars.model;
    
    public class Mp3Info {
    	private String id;
    	private String mp3Name;
    	private String mp3Size;
    	private String lrcName;
    	private String lrcSize;
    	public Mp3Info() {
    		super();
    	}
    	public Mp3Info(String id, String mp3Name, String mp3Size, String lrcName,
    			String lrcSize) {
    		super();
    		this.id = id;
    		this.mp3Name = mp3Name;
    		this.mp3Size = mp3Size;
    		this.lrcName = lrcName;
    		this.lrcSize = lrcSize;
    	}
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getMp3Name() {
    		return mp3Name;
    	}
    	public void setMp3Name(String mp3Name) {
    		this.mp3Name = mp3Name;
    	}
    	public String getMp3Size() {
    		return mp3Size;
    	}
    	public void setMp3Size(String mp3Size) {
    		this.mp3Size = mp3Size;
    	}
    	public String getLrcName() {
    		return lrcName;
    	}
    	public void setLrcName(String lrcName) {
    		this.lrcName = lrcName;
    	}
    	public String getLrcSize() {
    		return lrcSize;
    	}
    	public void setLrcSize(String lrcSize) {
    		this.lrcSize = lrcSize;
    	}
    	@Override
    	public String toString() {
    		return "Mp3Info [id=" + id + ", lrcName=" + lrcName + ", lrcSize="
    				+ lrcSize + ", mp3Name=" + mp3Name + ", mp3Size=" + mp3Size
    				+ "]";
    	}
    }
    

    FileUtils.java:

    package mars.utils;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import android.os.Environment;
    
    public class FileUtils {
    	private String SDPATH;
    
    	public String getSDPATH() {
    		return SDPATH;
    	}
    	public FileUtils() {
    		//得到当前外部存储设备的目录
    		// /SDCARD
    		SDPATH = Environment.getExternalStorageDirectory() + "/";
    	}
    	/**
    	 * 在SD卡上创建文件
    	 * 
    	 * @throws IOException
    	 */
    	public File creatSDFile(String fileName) throws IOException {
    		File file = new File(SDPATH + fileName);
    		file.createNewFile();
    		return file;
    	}
    	
    	/**
    	 * 在SD卡上创建目录
    	 * 
    	 * @param dirName
    	 */
    	public File creatSDDir(String dirName) {
    		File dir = new File(SDPATH + dirName);
    		dir.mkdir();
    		return dir;
    	}
    
    	/**
    	 * 判断SD卡上的文件夹是否存在
    	 */
    	public boolean isFileExist(String fileName){
    		File file = new File(SDPATH + fileName);
    		return file.exists();
    	}
    	
    	/**
    	 * 将一个InputStream里面的数据写入到SD卡中
    	 */
    	public File write2SDFromInput(String path,String fileName,InputStream input){
    		File file = null;
    		OutputStream output = null;
    		try{
    			creatSDDir(path);
    			file = creatSDFile(path + fileName);
    			output = new FileOutputStream(file);
    			byte buffer [] = new byte[4 * 1024];
    			while((input.read(buffer)) != -1){
    				output.write(buffer);
    			}
    			output.flush();
    		}
    		catch(Exception e){
    			e.printStackTrace();
    		}
    		finally{
    			try{
    				output.close();
    			}
    			catch(Exception e){
    				e.printStackTrace();
    			}
    		}
    		return file;
    	}
    
    }
    

    HttpDownloader.java:

    package mars.utils;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    
    public class HttpDownloader {
    	private URL url = null;
    
    	/**
    	 * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
    	 * 1.创建一个URL对象
    	 * 2.通过URL对象,创建一个HttpURLConnection对象
    	 * 3.得到InputStram
    	 * 4.从InputStream当中读取数据
    	 * @param urlStr
    	 * @return
    	 */
    	public String download(String urlStr) {
    		StringBuffer sb = new StringBuffer();
    		String line = null;
    		BufferedReader buffer = null;
    		try {
    			// 创建一个URL对象
    			url = new URL(urlStr);
    			// 创建一个Http连接
    			HttpURLConnection urlConn = (HttpURLConnection) url
    					.openConnection();
    			// 使用IO流读取数据
    			buffer = new BufferedReader(new InputStreamReader(urlConn
    					.getInputStream()));
    			while ((line = buffer.readLine()) != null) {
    				sb.append(line);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				buffer.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return sb.toString();
    	}
    
    	/**
    	 * 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
    	 */
    	public int downFile(String urlStr, String path, String fileName) {
    		InputStream inputStream = null;
    		try {
    			FileUtils fileUtils = new FileUtils();
    			
    			if (fileUtils.isFileExist(path + fileName)) {
    				return 1;
    			} else {
    				inputStream = getInputStreamFromUrl(urlStr);
    				File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream);
    				if (resultFile == null) {
    					return -1;
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    			return -1;
    		} finally {
    			try {
    				inputStream.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return 0;
    	}
    
    	/**
    	 * 根据URL得到输入流
    	 * 
    	 * @param urlStr
    	 * @return
    	 * @throws MalformedURLException
    	 * @throws IOException
    	 */
    	public InputStream getInputStreamFromUrl(String urlStr)
    			throws MalformedURLException, IOException {
    		url = new URL(urlStr);
    		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    		InputStream inputStream = urlConn.getInputStream();
    		return inputStream;
    	}
    }
    

    MyContentHandler.java:

    package mars.xml;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class MyContentHandler extends DefaultHandler {
    	String hisname, address, money, sex, status;
    	String tagName;
    
    	public void startDocument() throws SAXException {
    		System.out.println("````````begin````````");
    	}
    
    	public void endDocument() throws SAXException {
    		System.out.println("````````end````````");
    	}
    
    	public void startElement(String namespaceURI, String localName,
    			String qName, Attributes attr) throws SAXException {
    		tagName = localName;
    		if (localName.equals("worker")) {
    			//获取标签的全部属性
    			for (int i = 0; i < attr.getLength(); i++) {
    				System.out.println(attr.getLocalName(i) + "=" + attr.getValue(i));
    			}
    		}
    	}
    
    	public void endElement(String namespaceURI, String localName, String qName)
    			throws SAXException {
    		//在workr标签解析完之后,会打印出所有得到的数据
    		tagName = "";
    		if (localName.equals("worker")) {
    			this.printout();
    		}
    	}
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
    		if (tagName.equals("name"))
    			hisname = new String(ch, start, length);
    		else if (tagName.equals("sex"))
    			sex = new String(ch, start, length);
    		else if (tagName.equals("status"))
    			status = new String(ch, start, length);
    		else if (tagName.equals("address"))
    			address = new String(ch, start, length);
    		else if (tagName.equals("money"))
    			money = new String(ch, start, length);
    	}
    
    	private void printout() {
    		System.out.print("name: ");
    		System.out.println(hisname);
    		System.out.print("sex: ");
    		System.out.println(sex);
    		System.out.print("status: ");
    		System.out.println(status);
    		System.out.print("address: ");
    		System.out.println(address);
    		System.out.print("money: ");
    		System.out.println(money);
    		System.out.println();
    	}
    
    }
    

    test.xml:

    XMLActivity.java:

    package mars.xml;
    
    import java.io.StringReader;
    
    import javax.xml.parsers.SAXParserFactory;
    
    import mars.utils.HttpDownloader;
    
    import org.xml.sax.InputSource;
    import org.xml.sax.XMLReader;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class XMLActitity extends Activity {
        /** Called when the activity is first created. */
    	private Button parseButton ;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            parseButton = (Button)findViewById(R.id.parseButton);
            parseButton.setOnClickListener(new ParseButtonListener());
        }
        
        class ParseButtonListener implements OnClickListener{
    
    		@Override
    		public void onClick(View v) {
    			HttpDownloader hd = new HttpDownloader();
    			String resultStr = hd.download("http://192.168.1.107:8081/voa1500/test.xml");
    			System.out.println(resultStr);
    			try{
    				//创建一个SAXParserFactory
    				SAXParserFactory factory = SAXParserFactory.newInstance();
    				XMLReader reader = factory.newSAXParser().getXMLReader();
    				//为XMLReader设置内容处理器
    				reader.setContentHandler(new MyContentHandler());
    				//开始解析文件
    				reader.parse(new InputSource(new StringReader(resultStr)));
    			}
    			catch(Exception e){
    				e.printStackTrace();
    			}
    		}
        	
        }
    }
    

    点击"开始解析XML"按钮后,输出如下:

      

      

     

  • 相关阅读:
    2016-02-24 工作日记
    金字塔培训
    你找到自己的路了么?
    你是个成熟的职场人么?
    码农十年总结
    码农十年连载六
    码农十年连载五
    码农十年连载四
    码农十年连载三
    码农十年连载二
  • 原文地址:https://www.cnblogs.com/leihupqrst/p/3175930.html
Copyright © 2011-2022 走看看