XML,即可扩展标记语言(Extensible Markup Language)非常适合万维网传输,提供统一方法来描述和交换独立于应用程序或供应商的结构化数据,在互联网上被广泛使用。
本文介绍了Android中读取XML数据与在Android中生成XML数据的方法。
1.xml简介
xml可扩展标记语言,extensible Markup Language
传输数据而非显示数据,需要自定义标签,为纯文本
大小写敏感,正确的嵌套,属性值加引号,空格保留,必须有根元素
2.读取与解析xml数据
通过getAssets().open()获取assets文件夹下的文件//打开assets文件夹中的文件为InputStream
InputStream is = getAssets().open("language.xml");
创建builderFactory//创建DocumentBuilderFactory
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
创建builder//由builderFactory创建DocumentBuilder
DocumentBuilder builder = builderFactory.newDocumentBuilder();
builder转为document//将InputStream通过builder转化为document
Document document = builder.parse(is);
document通过getDocumentElement获取元素//获取文件中的根元素
Element element = document.getDocumentElement();
element通过getElementByTagName获取子元素的nodelist//获取所有标签名为"lan"的子元素
NodeList nodeList = element.getElementsByTagName("lan");
nodelist通多item(i)获取第i个元素//将所有获取到的"lan"标签的nodelist转换为element
Element lan = (Element) nodeList.item(i);
元素通过getAttribute()获取属性//获取lan的id 属性
tv.append(lan.getAttribute("id")+"\n");// 获取lan标签下第0个name 标签的文本
tv.append(lan.getElementsByTagName("name").item(0).getTextContent()+"\n");//获取lan标签下第0个ide标签的文本内容
tv.append(lan.getElementsByTagName("ide").item(0).getTextContent()+"\n”);
Factory->builder->Document. Document获取元素:getDocumentElement
Element获取元素:getElementByTagName,结果为nodelist
nodelist获取Element,item(i),element获取属性:getAttribute
3.生成与输出xml数据
创建factory与builder,创建document//创建factory和builder
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//创建Documnet
Document newxml = builder.newDocument();
通过document.createElement()创建标签,setAttribute()为标签创建属性,setTextContent为标签创建文本Element lan1 = newxml.createElement("lan");
lan1.setAttribute("id","1");
Element name1 = newxml.createElement("name”);
通过appendChild()为标签添加子标签ide1.setTextContent("Eclipse");
//添加子标签
lan1.appendChild(name1);
lan1.appendChild(ide1);
language.appendChild(lan1);
通过appendChild()为document添加根标签//为Document添加根标签
newxml.appendChild(language);
创建TransformerFactory与Transformer,设置输出属性//创建factory和transformer
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
//设置输出属性
transformer.setOutputProperty("encoding","utf-8”);
创建StringWriter用于输出,用transformer将source转换为result//创建StringWriter用于输出
StringWriter sw =newStringWriter();
//transformer将Document转化为结果
transformer.transform(newDOMSource(newxml),newStreamResult(sw));