Android操作XML的几种方法总结
XML是Android开发中非常重要的一个概念,关于XML的使用,本文将对Android操作XML的几种方法进行总结,包括DOM方式和SAX方式。同时还会给出两个示例来帮助你更好地理解。
DOM方式
DOM方式指的是将整个XML文件加载进内存并对整个XML进行解析。使用DOM方式对XML的操作主要包括以下步骤:
- 创建DocumentBuilderFactory对象。
- 通过DocumentBuilderFactory对象创建DocumentBuilder对象。
- 通过DocumentBuilder对象的parse方法解析XML文件,并将解析结果放入Document对象中。
- 通过Document对象对XML文件进行读、写、增、删等操作。
下面是一个示例代码:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new FileInputStream(new File("example.xml")));
//读取XML文件
Element root = document.getDocumentElement();
NodeList nodeList = root.getElementsByTagName("name");
for(int i = 0; i < nodeList.getLength(); i++){
Node n = nodeList.item(i);
String name = n.getFirstChild().getNodeValue();
Log.d(TAG,"name: " + name);
}
//写入XML文件
Element person = document.createElement("person");
Element name = document.createElement("name");
name.setTextContent("Tom");
Element age = document.createElement("age");
age.setTextContent("18");
person.appendChild(name);
person.appendChild(age);
root.appendChild(person);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new FileOutputStream(new File("example.xml")));
transformer.transform(source, result);
上述代码中,我们首先创建了DocumentBuilderFactory对象,然后获取DocumentBuilder对象,之后通过DocumentBuilder对象解析XML文件获取Document对象。最后,我们使用Document对象对XML文件进行读、写、增、删等操作。需要注意的是,我们需要使用Transformer对象将修改后的Document对象写入到XML文件中。
SAX方式
SAX方式指的是逐行读取XML文件,根据标签,依次触发相应的事件,并对事件进行处理。使用SAX方式对XML的操作主要包括以下步骤:
- 创建SAXParserFactory对象。
- 通过SAXParserFactory对象创建SAXParser对象。
- 创建自定义Handler类,通过SAXParser对象的parse方法解析XML文件并设置默认Handler对象。
- 在自定义Handler类中实现相应的事件处理方法。
下面是一个示例代码:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
MyHandler handler = new MyHandler();
reader.setContentHandler(handler);
reader.parse(new InputSource(new FileInputStream(new File("example.xml"))));
//自定义Handler类
public class MyHandler extends DefaultHandler{
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if("person".equals(qName)){
Log.d(TAG,"person: ");
}else if("name".equals(qName)){
Log.d(TAG,"name: " + attributes.getValue(0));
}else if("age".equals(qName)){
Log.d(TAG,"age: " + attributes.getValue(0));
}
}
}
上述代码中,我们首先创建了SAXParserFactory对象,之后获取SAXParser对象,通过SAXParser对象获取XMLReader对象,并创建自定义Handler类。最后,我们通过XMLReader对象的parse方法解析XML文件,并在自定义Handler类中实现相应的事件处理方法。
示例1:解析weather.xml文件展示天气信息
以下是示例代码(使用DOM方式):
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(getAssets().open("weather.xml"));
//读取XML文件
Element root = document.getDocumentElement();
NodeList nodeList = root.getElementsByTagName("province");
for(int i = 0; i < nodeList.getLength(); i++){
Node n = nodeList.item(i);
String province = n.getAttributes().getNamedItem("name").getNodeValue();
NodeList cityList = n.getChildNodes();
for(int j = 0; j < cityList.getLength(); j++){
Node c = cityList.item(j);
if(c.getNodeType() == Node.ELEMENT_NODE){
String city = c.getAttributes().getNamedItem("name").getNodeValue();
NodeList weatherList = c.getChildNodes();
for(int k = 0; k < weatherList.getLength(); k++){
Node w = weatherList.item(k);
if(w.getNodeType() == Node.ELEMENT_NODE){
String time = w.getAttributes().getNamedItem("time").getNodeValue();
String temperature = w.getAttributes().getNamedItem("temperature").getNodeValue();
String weather = w.getAttributes().getNamedItem("weather").getNodeValue();
Log.d(TAG,"province: " + province + ", city: " + city + ", time: " + time + ", temperature: " + temperature + ", weather: " + weather);
}
}
}
}
}
示例代码中,我们读取了assets文件夹中的weather.xml文件,使用DOM方式解析XML文件,遍历省份、城市和天气信息,并将其输出到日志中。
示例2:构建person.xml文件写入人员信息
以下是示例代码(使用DOM方式):
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
//写入XML文件
Element root = document.createElement("root");
Element person = document.createElement("person");
Element name = document.createElement("name");
name.setTextContent("Tom");
Element age = document.createElement("age");
age.setTextContent("18");
person.appendChild(name);
person.appendChild(age);
root.appendChild(person);
document.appendChild(root);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new FileOutputStream(new File(getFilesDir(),"person.xml")));
transformer.transform(source, result);
示例代码中,我们使用DOM方式构建了一个person.xml文件,并将其写入到应用程序的文件夹中。文件中包含一个person节点,其中包含name和age两个子节点。最后,我们使用Transformer对象将XML文件写入到文件中。
总之,Android操作XML的几种方法总结包括DOM方式和SAX方式。DOM方式适合于对XML文件进行读、写、增、删等操作,使用起来比较方便。SAX方式适合于对大型XML文件进行处理,可以有效地减少内存的消耗。在实际开发中,我们可以根据实际情况选择适合自己的方式对XML文件进行操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android操作XML的几种方法总结 - Python技术站