数据存取之DOM解析

利用DOM方式创建xml文档,即可以保存文件输出

在应用保存信息到文档,并输出到内存卡 代码如下


public class MyDemo extends Activity {
private EditText name = null;
private EditText email = null;
private Button but = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.but = (Button) super.findViewById(R.id.but);
this.name = (EditText) super.findViewById(R.id.name);
this.email = (EditText) super.findViewById(R.id.email);
this.but.setOnClickListener(new OnClickListenerImpl());
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View arg0) {
// if (!Environment.getExternalStorageState().equals(
// Environment.MEDIA_MOUNTED)) {
// return;// 不存在不操作
// }
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + "mydata" + File.separator + "member.xml");
// Log.i("储存卡路径",
// Environment.getExternalStorageDirectory().toString());
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
// DOM解析
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
Document doc = null;
doc = builder.newDocument();// 创建新的文档
Element name = doc.createElement("name");
Element email = doc.createElement("email");
Element linkman = doc.createElement("linkman");
Element addresslist = doc.createElement("addresslist");
name.appendChild(doc.createTextNode(MyDemo.this.name.getText()
.toString()));
email.appendChild(doc.createTextNode(MyDemo.this.email.getText()
.toString()));
linkman.appendChild(name);
linkman.appendChild(email);
addresslist.appendChild(linkman);
doc.appendChild(addresslist);
// 创建转换器输出
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = null;
try {
t = tf.newTransformer();
} catch (TransformerConfigurationException e) {
e.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();
}
}
}
}

利用Dom模型读取xml文件,代码如下

public class MyDemo extends Activity {
private TextView name = null;
private TextView email = null;
private Button but = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.but = (Button) super.findViewById(R.id.but);
this.name = (TextView) super.findViewById(R.id.name);
this.email = (TextView) super.findViewById(R.id.email);
this.but.setOnClickListener(new OnClickListenerImpl());
}

private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View arg0) {
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
return;// 不存在不操作
}
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + "mydata" + File.separator + "member.xml");
if (!file.exists()) {
return;
}
// DOM解析
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
Document doc = null;
try {
doc = builder.parse(file);
} catch (SAXException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
NodeList n1 = doc.getElementsByTagName("linkman");
for (int i = 0; i < n1.getLength(); i++) {
Element e = (Element) n1.item(i);
MyDemo.this.name.setText(e.getElementsByTagName("name").item(0)
.getFirstChild().getNodeValue());
MyDemo.this.email.setText(e.getElementsByTagName("email")
.item(0).getFirstChild().getNodeValue());
}
}
}
}

DOM删除修改Xml文件

public void deleteNode() {
Element root, thebook;
root = doc.getDocumentElement();
thebook = (Element) selectSingleNode("/books/book[name='西游记']", root);
thebook.getElementsByTagName("author").item(0).setTextContent("施耐庵");
thebook=(Element) selectSingleNode("/books/book[@id='01']",root);
thebook.getParentNode().removeChild(thebook);
doc2XmlFile(doc, file.toString());  
}

public static Node selectSingleNode(String express, Object source) {
Node result = null;
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
try {
result = (Node) xpath
.evaluate(express, source, XPathConstants.NODE);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return result;
}
public boolean doc2XmlFile(Document document, String filename) {        把结果转换成xml文档
boolean flag = true;
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = null;
try {
t = tf.newTransformer();
t.setOutputProperty(OutputKeys.ENCODING, "GBK");
DOMSource resource = new DOMSource(document);
StreamResult result = new StreamResult(filename);
t.transform(resource, result);
} catch (TransformerException e) {
flag = false;
System.out.println("更新" + filename + "出错" + e);
e.printStackTrace();
}
return flag;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值