XML(ExtentsibleMarkup Language)是一种可扩展标记语言,主要用于存取数据,关于xml和html 的区别可详细查看XML与HTML的区别
本文主要介绍在android中如果获取xml中的内容:
首先在Android studio IDE下为项目创建一个assets文件夹,如果遇到问题请参考android studio 下打开assets的文件
然后在里面创建一个data.xml文件,内容如下:
<language cat="it">
<lan id="1">
<name>c#</name>
<ide>Visual Studio</ide>
</lan>
<lan id="2">
<name>java</name>
<ide>eclipse</ide>
</lan>
<lan id="3">
<name>android</name>
<ide>android Studio</ide>
</lan>
</language>
根节点为language,有一个属性cat=“it”
然后下面添加了三个lan结点,里面存了name和ide
接下来回到MainActivity.jav中来读取xml
首先打开data.xml
InputStream in=getResources().getAssets().open("data.xml");//方法返回的是一个输入流,用于读取数据
然后要用到一个类Document类(org.w3c.dom包)
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder=dbf.newDocumentBuilder();
Document document=documentBuilder.parse(in);
接下来对document进行操作读取数据
NodeList nodeList=document.getElementsByTagName("language");
//根节点只有一个所以,可以
Element root=nodeList.item(0);
//获得根节点的属性,加入到textView中
tv.append(root.getAttribute("cat").toString()+"\n");
//获得根节点的子节点
NodeList subNodeList=root.getElementsByTagName("lan");
//循环取出数据
for(int i=0;i<subNodeList.getLength();i++){
Element lan= (Element) subNodeList.item(i);
tv.append("<lan id=\""+lan.getAttribute("id")+"\">");
Element name= (Element)
//获得name标签,并用getTextContent()取得文本
lan.getElementsByTagName("name").item(0);
tv.append("<name>"+name.getTextContent()+"</name>"+"\n");
Element ide= (Element) lan.getElementsByTagName("ide").item(0);
tv.append("<ide>"+ide.getTextContent()+"</ide>"+"\n");
}
运行如图:
然后接着来生成与输出XML
try {
//先新建一个空的document
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
//根节点
Element language = document.createElement("language");
language.setAttribute("cat", "it");
//创建子节点
Element lan1 = document.createElement("lan");
lan1.setAttribute("id", "1");//设置属性
Element name1 = document.createElement("name");
Element ide1 = document.createElement("ide");
name1.setTextContent("c#");//设置内容
ide1.setTextContent("visual studio");
lan1.appendChild(name1);//加入到父节点下面
lan1.appendChild(ide1);
language.appendChild(lan1);
Element lan2 = document.createElement("lan");
lan2.setAttribute("id", "2");
Element name2 = document.createElement("name");
Element ide2 = document.createElement("ide");
name2.setTextContent("c#");
ide2.setTextContent("visual studio");
lan2.appendChild(name2);
lan2.appendChild(ide2);
language.appendChild(lan2);
Element lan3 = document.createElement("lan");
lan3.setAttribute("id", "3");
Element name3 = document.createElement("name");
Element ide3 = document.createElement("ide");
name3.setTextContent("c#");
ide3.setTextContent("visual studio");
lan3.appendChild(name3);
lan3.appendChild(ide3);
language.appendChild(lan3);
//将根节点加入到document
document.appendChild(language);
//利用Trandform进行转换
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty("encoding", "utf-8");//设置输出参数
StringWriter sw=new StringWriter();//创建一个输出流
transformer.transform(new DOMSource(document),new StreamResult(sw));//参数为源和输出,使用DOMSource(Node)和StreamResult(Writer)
tv.append(sw.toString());
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
结果如图:
如果要写入到内存卡
File file = Environment.getExternalStorageDirectory();
File data = new File(file, File.separator + "data.xml");
if (!data.exists()) {
data.createNewFile();
}
transformer.transform(new DOMSource(document), new StreamResult(data));//参数为源和输出,使用DOMSource(Node)和StreamResult(Writer)
请务必要声明权限