android—DOM解析xml

输出xml:

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MyDOMDemo extends Activity {
	private TextView name = null;					// 文本输入组件
	private TextView email = null;					// 文本输入组件
	private Button but = null;						// 按钮组件

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);		// 调用布局管理器
		this.name = (TextView) super.findViewById(R.id.name) ;	// 取得组件
		this.email = (TextView) super.findViewById(R.id.email) ;// 取得组件
		this.but = (Button) super.findViewById(R.id.but) ;		// 取得组件
		this.but.setOnClickListener(new OnClickListenerImpl()) ;	// 设置监听
	}
	private class OnClickListenerImpl implements OnClickListener {
		@Override
		public void onClick(View view) {
			if(!Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)){				// 如果sdcard不存在
				return ;										// 返回被调用处
			}
			File file = new File(Environment
					.getExternalStorageDirectory().toString()
					+ File.separator
					+ "sdudata" + File.separator + "member.xml") ;	// 定义File类对象
			if (! file.getParentFile().exists()) {				// 父文件夹不存在
				file.getParentFile().mkdirs() ; 				// 创建文件夹 
			}
			// 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			// 2、通过DocumentBuilderFactory取得DocumentBuilder
			DocumentBuilder builder = null;
			try {
				builder = factory.newDocumentBuilder();
			} catch (ParserConfigurationException e) {
				e.printStackTrace();
			}
			// 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
			Document doc = null;
			doc = builder.newDocument();						// 创建一个新的文档
			// 4、建立各个操作节点
			Element addresslist = doc.createElement("addresslist") ;// 建立节点
			Element linkman = doc.createElement("linkman") ;	// 建立节点
			Element name = doc.createElement("name") ;			// 建立节点
			Element email = doc.createElement("email") ;		// 建立节点
			// 5、设置节点的文本内容,即:为每一个节点添加文本节点
			name.appendChild(doc.createTextNode(MyDOMDemo.this.name.getText()
					.toString())); 								// 设置文本
			email.appendChild(doc.createTextNode(MyDOMDemo.this.email.getText()
					.toString())) ;										// 设置文本
			// 6、设置节点关系
			linkman.appendChild(name) ;							// 子节点
			linkman.appendChild(email) ;						// 子节点
			addresslist.appendChild(linkman) ;					// 子节点
			doc.appendChild(addresslist) ;						// 文档上保存节点
			// 7、输出文档到文件之中
			TransformerFactory tf = TransformerFactory.newInstance();
			Transformer t = null;
			try {
				t = tf.newTransformer();
			} catch (TransformerConfigurationException e1) {
				e1.printStackTrace();
			}
			t.setOutputProperty(OutputKeys.ENCODING, "GBK") ;	// 设置编码
			DOMSource source = new DOMSource(doc);				// 输出文档
			StreamResult result = new StreamResult(file);		// 指定输出位置
			try {
				t.transform(source, result);					// 输出
			} catch (TransformerException e) {
				e.printStackTrace();
			}
		}
		
	}
}


读取xml:

import java.io.File;
import java.io.IOException;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MyDOMDemo extends Activity {
	private TextView name = null;					// 文本输入组件
	private TextView email = null;					// 文本输入组件
	private Button but = null;						// 按钮组件

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);		// 调用布局管理器
		this.name = (TextView) super.findViewById(R.id.name) ;	// 取得组件
		this.email = (TextView) super.findViewById(R.id.email) ;// 取得组件
		this.but = (Button) super.findViewById(R.id.but) ;		// 取得组件
		this.but.setOnClickListener(new OnClickListenerImpl()) ;	// 设置监听
	}
	private class OnClickListenerImpl implements OnClickListener {
		@Override
		public void onClick(View view) {
			if(!Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)){				// 如果sdcard不存在
				return ;										// 返回被调用处
			}
			File file = new File(Environment
					.getExternalStorageDirectory().toString()
					+ File.separator
					+ "sdudata" + File.separator + "member.xml") ;	// 定义File类对象
			if (! file.exists()) {								// 父文件夹不存在
				return ;										// 返回被调用处
			}
			// 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			// 2、通过DocumentBuilderFactory取得DocumentBuilder
			DocumentBuilder builder = null;
			try {
				builder = factory.newDocumentBuilder();
			} catch (ParserConfigurationException e) {
				e.printStackTrace();
			}
			// 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
			Document doc = null;
			try {
				doc = builder.parse(file);						// 读取指定路径的xml文件
			} catch (SAXException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			// 4、查找linkman的节点
			NodeList nl = doc.getElementsByTagName("linkman");
			// 5、输出NodeList中第一个子节点中文本节点的内容
			for (int x = 0; x < nl.getLength(); x++) {			// 循环输出节点内容
				Element e = (Element) nl.item(x) ;				// 取得每一个元素
				MyDOMDemo.this.name.setText(e.getElementsByTagName("name")
						.item(0).getFirstChild().getNodeValue());	// 设置文本
				MyDOMDemo.this.email.setText(e.getElementsByTagName("email")
						.item(0).getFirstChild().getNodeValue());	// 设置文本
			}
		}
	}
}

需要权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值