>  기사  >  백엔드 개발  >  Android가 DOM 및 SAXParserFactory를 사용하여 XML 파일을 구문 분석하는 방법

Android가 DOM 및 SAXParserFactory를 사용하여 XML 파일을 구문 분석하는 방법

黄舟
黄舟원래의
2017-02-20 15:00:211735검색

다음 xml 파일의 경우:


<?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>


다음과 같이 구문 분석하세요.



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;
	}


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;
		}

	}

위는 Android가 DOM 및 SAXParserFactory를 사용하여 내용을 구문 분석하는 방법입니다. XML 파일 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.