Maison > développement back-end > Tutoriel XML/RSS > Comment Android utilise DOM et SAXParserFactory pour analyser les fichiers XML

Comment Android utilise DOM et SAXParserFactory pour analyser les fichiers XML

黄舟
Libérer: 2017-02-20 15:00:21
original
1772 Les gens l'ont consulté

Pour le fichier XML suivant :


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<books>  
    <book email="zhoujunhui">  
        <name>rjzjh</name>  
        <price>jjjjjj</price>  
    </book>  
     <book email="aaaaaaaaa">  
        <name>bbbb</name>  
        <price>ccc</price>  
    </book>  
</books>
Copier après la connexion


analysez-le comme ceci :



import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.util.Log;

public class TestActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		XmlReader();
		for(int i=0;i<list.size();i++) {
			Book book = list.get(i);
			Log.d("TAG", "name="+book.name+"email="+book.email);
		}
	}


	public void XmlReader() {
		Document doc = null;
		AssetManager assetManager = this.getAssets();
		DocumentBuilder docBuilder = null;
		DocumentBuilderFactory docBuilderFactory = null;
		try {
			docBuilderFactory = DocumentBuilderFactory.newInstance();
			docBuilder = docBuilderFactory.newDocumentBuilder();
			doc = docBuilder.parse(assetManager.open("test1.xml"));
			Element root = doc.getDocumentElement();
			NodeList books = root.getChildNodes();
			if (books != null) {
				for (int i = 0; i < books.getLength(); i++) {
					Node book = books.item(i);
					Book mybook = null;
					if (book.getNodeType() == Node.ELEMENT_NODE) {
						//这里才表示这个是<book>节点
						mybook = new Book();
						String email = book.getAttributes()
								.getNamedItem("email").getNodeValue();
						mybook.email = email;
						
						for (Node node = book.getFirstChild(); node != null; node = node
								.getNextSibling()) {
							
							if (node.getNodeType() == Node.ELEMENT_NODE) {
								if (node.getNodeName().equals("name")) {
									String name1 = node.getFirstChild()
											.getNodeValue();
									mybook.name = name1;
								}
								if (node.getNodeName().equals("price")) {
									String price = node.getFirstChild()
											.getNodeValue();
									mybook.price = price;
								}
							}
							
						}
						
						list.add(mybook);
					}
					
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	
	private ArrayList<Book> list = new ArrayList<Book>();
	
	private class Book{
		String email;
		String name;
		String price;
	}
Copier après la connexion


Utilisation de SAXParserFactory :


@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		SAXParserFactory factory = SAXParserFactory.newInstance();

		try {
			SAXParser saxParser = factory.newSAXParser();
			InputStream is = this.getAssets().open("test1.xml", Context.MODE_PRIVATE);
			saxParser.parse(is, new MyDefaultHandler());
		} catch (Exception ex) {

		}
		System.out.println("===size=" + list.size());
		for (int i = 0; i < list.size(); i++) {
			Book book = list.get(i);
			Log.d("TAG", "name=" + book.name + "email=" + book.email);
		}
	}

	protected String getElementName(String name, String qName) {
		if ("".equals(name)) {
			return qName;
		} else {
			return name;
		}
	}

	class MyDefaultHandler extends DefaultHandler {

		private StringBuffer buf;
		private Book mBook;

		public MyDefaultHandler() {
			super();
			mBook = new Book();
		}

		protected StringBuffer getBuffer() {
			return this.buf;
		}

		@Override
		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
			super.startElement(uri, localName, qName, attributes);
			buf = new StringBuffer();
			for (int i = 0; i < attributes.getLength(); i++) {
				String value = attributes.getValue(i);
				mBook.email = value;
			}

		}

		@Override
		public void characters(char[] chars, int start, int length) throws SAXException {
			super.characters(chars, start, length);
			getBuffer().append(chars, start, length);
		}

		@Override
		public void endElement(String uri, String localName, String qName) throws SAXException {
			super.endElement(uri, localName, qName);
			String elementName = getElementName(localName, qName);
			if (elementName.equals("book")) {
				list.add(mBook);
				mBook = new Book();
			} else if (elementName.equals("name")) {
				mBook.name = getBuffer().toString();
			} else if (elementName.equals("price")) {
				mBook.price = getBuffer().toString();
			}

		}

	}

	private ArrayList<Book> list = new ArrayList<Book>();

	private class Book {
		String email;
		String name;
		String price;

		@Override
		public String toString() {
			return "name=" + name + "price=" + price;
		}

	}
Copier après la connexion

Ce qui précède explique comment Android utilise DOM et SAXParserFactory pour analyser le contenu du fichier XML Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !



Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal