xml文件用于传输数据文件的。xml文件的格式如下:
<?xml version=1.0 encoding="utf-8"?>
<book> //在xml文件里面标签是可以自定义的
<bookname>冰与火之歌</bookname>
<price>90</price>
</book>
解析xml文件的方式有几种:
一:DOM方式解析xml文件
public class MainActivity extends Activity {
private TextView textView1,textView2;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) findViewById(R.id.textview1);
textView2 = (TextView) findViewById(R.id.textview2);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new mylistener());
}
private class mylistener implements OnClickListener{
@Override
public void onClick(View v) {
//如果sdcard不存在,返回被调用处
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
return;
}
//sdcard存在的话,获取xml文件的路径
//sdcard的根目录/myfile/myxml.xml File.separator的详细用法解释在——>File.separator的详细用法<--可见
File file = new File(Environment.getExternalStorageDirectory().toString()
+File.separator+"myfile"+File.separator+"myxml.xml");
if(!file.exists()){
return;//如果文件不存在返回被调用的地方
}
//DocumentBuilderFactory.newInstance()方法返回一个一个新的DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();//通过factory实例化一个DocumentBuilder
Document doc = builder.parse(file);//解析指定的xml文件同时返回一个document对象
NodeList nl = doc.getElementsByTagName("bookname");//返回一个包含所有节点叫做bookname的结点列表
for(int i = 0;i<nl.getLength();i++){
Element element = (Element) nl.item(i);//循环取得每一个元素
textView1.setText(element.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
textView2.setText(element.getElementsByTagName("price").item(0).getFirstChild().getNodeValue());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
二:DOM方式建立xml创建xml文件
比如要创建这样一个xml文件
<?xml version=1.0 encoding="utf-8"?>
<addresslist>
<linkman>
<name>张三</name>
<email>zhangsan@163.com</email>
</linkman>
</addresslist>
代码如下:
public class MainActivity extends Activity {
private TextView textView1,textView2;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) findViewById(R.id.textview1);
textView2 = (TextView) findViewById(R.id.textview2);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new mylistener());
}
private class mylistener implements OnClickListener{
@Override
public void onClick(View v) {
//如果sdcard不存在,返回被调用处
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
return;
}
//sdcard存在的话,获取xml文件的路径
//sdcard的根目录/myfile/myxml.xml File.separator的详细用法解释在——>File.separator的详细用法<--可见
File file = new File(Environment.getExternalStorageDirectory().toString()
+File.separator+"myfile"+File.separator+"myxml.xml");
if(!file.exists()){
return;//如果文件不存在返回被调用的地方
}
//DocumentBuilderFactory.newInstance()方法返回一个一个新的DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();//通过factory实例化一个DocumentBuilder
Document doc = builder.newDocument();//创建一个新的文档
//建立xml文件的操作结点
Element addresslist = doc.createElement("addresslist");
Element linkman = doc.createElement("linkman");
Element name = doc.createElement("name");
Element email = doc.createElement("email");
//设置结点内容为用户的输入值.appendChild()方法用于添加子节点,
// 比如 linkman.appendChild(name);意思是给linkman结点添加子节点name
name.appendChild(doc.createTextNode(textView1.getText().toString()));//把texteview1的内容设置为结点name的内容
email.appendChild(doc.createTextNode(textView2.getText().toString()));//把texteview2的内容设置为结点name的内容
linkman.appendChild(name);
linkman.appendChild(email);
addresslist.appendChild(linkman);
doc.appendChild(addresslist);
//输出文档到文件中
TransformerFactory tf = TransformerFactory.newInstance();
try {
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING,"utf-8");//设置编码
DOMSource source =new DOMSource(doc);//承接一个DOM树的转型结果
StreamResult result = new StreamResult(file);//为转型结果指定输出路径
transformer.transform(source,result);//将转型好的DOM资源转型输出到result指定的路径中
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
}
}