📅  最后修改于: 2023-12-03 14:39:06.794000             🧑  作者: Mango
在Android开发中,我们经常需要解析XML数据。DOM解析器是一种基于树形结构的解析方式,可以将一个XML文档读入内存中并构建一个DOM树,开发者可以在内存中对整个XML文档进行操作。
在需要使用DOM解析器时,需要导入相关依赖:
implementation 'javax.xml.parsers:jaxp-api:1.4.5'
implementation 'org.apache.harmony:xml:2.0.2'
下面我们通过一个简单的例子来介绍如何使用DOM解析器解析XML数据。
我们有一个名为person.xml
的文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>张三</name>
<gender>男</gender>
<age>18</age>
</person>
<person id="2">
<name>李四</name>
<gender>女</gender>
<age>20</age>
</person>
</persons>
我们的目标是将这个XML文件解析成一个Person
对象列表。首先,我们需要定义Person
类:
public class Person {
private int id;
private String name;
private String gender;
private int age;
public Person(int id, String name, String gender, int age) {
this.id = id;
this.name = name;
this.gender = gender;
this.age = age;
}
// 省略getter和setter方法
}
然后,我们可以编写一个工具类XmlUtils
来实现XML的解析:
public class XmlUtils {
public static List<Person> parseXML(String xml) throws Exception {
// 创建一个DocumentBuilderFactory实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 创建一个DocumentBuilder实例
DocumentBuilder builder = factory.newDocumentBuilder();
// 将字符串转换为输入流
InputStream is = new ByteArrayInputStream(xml.getBytes());
// 解析XML文件,获取Document对象
Document doc = builder.parse(is);
// 获取根节点
Element root = doc.getDocumentElement();
// 获取所有person节点
NodeList persons = root.getElementsByTagName("person");
List<Person> personList = new ArrayList<>();
for (int i = 0; i < persons.getLength(); i++) {
Element element = (Element) persons.item(i);
// 获取属性id的值
int id = Integer.parseInt(element.getAttribute("id"));
// 获取子节点
NodeList children = element.getChildNodes();
String name = "";
String gender = "";
int age = 0;
// 遍历子节点,获取name、gender和age的值
for (int j = 0; j < children.getLength(); j++) {
Node child = children.item(j);
String nodeName = child.getNodeName();
String nodeValue = child.getTextContent();
switch (nodeName) {
case "name":
name = nodeValue;
break;
case "gender":
gender = nodeValue;
break;
case "age":
age = Integer.parseInt(nodeValue);
break;
}
}
// 创建Person对象,并添加到列表
Person person = new Person(id, name, gender, age);
personList.add(person);
}
return personList;
}
}
在上面的代码中,我们使用了DocumentBuilderFactory
和DocumentBuilder
来创建一个Document
对象,然后通过遍历节点树的方式来获取XML文档中的数据,并将其封装成Person
对象。
下面是一个使用示例:
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<persons>\n" +
" <person id=\"1\">\n" +
" <name>张三</name>\n" +
" <gender>男</gender>\n" +
" <age>18</age>\n" +
" </person>\n" +
" <person id=\"2\">\n" +
" <name>李四</name>\n" +
" <gender>女</gender>\n" +
" <age>20</age>\n" +
" </person>\n" +
"</persons>";
try {
List<Person> personList = XmlUtils.parseXML(xml);
for (Person person : personList) {
Log.d("MainActivity", person.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
我们将XML数据传递给XmlUtils.parseXML()
方法,得到一个Person
对象列表,然后遍历输出每个Person
对象的名称。
DOM解析器是一种非常常用的XML解析方式,在Android开发中也经常被使用到。通过本文的介绍,相信读者已经对DOM解析器有了基本的了解,可以在开发中使用它来解析XML数据了。