java----DOM解析XML
DOM:
直接一次性将XML文件读取到内存中,所以可以跨节点读取所需要的数据
适合服务器开发
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class Demo{
public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
xmlTest();
}
public static void xmlTest() throws ParserConfigurationException, SAXException, IOException {
//创建一个DOM解析器工厂对象;
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//通过工厂对象创建DOM解析器
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//解析文档
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("com\\first\\person.xml");
Document doc = documentBuilder.parse(resourceAsStream);//doc 即为树状结构的存储对象,在内存中;
ArrayList<Person> personList = new ArrayList<>();
NodeList XMLpersonlist = doc.getElementsByTagName("person");
Person person = null;
for (int i = 0; i <XMLpersonlist.getLength(); i++) {
person = new Person();
//获取属性值
String p_id = XMLpersonlist.item(i).getAttributes().getNamedItem("person_id").getNodeValue();
person.setId(p_id);
NodeList childNodes = XMLpersonlist.item(i).getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
Node children_node = childNodes.item(j);
String node_name = children_node.getNodeName();
if ("name".equals(node_name)){
//把文本也看成一个节点,<name>zy</name> 中zy当做节点;children_node.getFirstChild()表示获取zy这个节点;
//zy.getNodeValue() 获取的值就是zy;
String p_name = children_node.getFirstChild().getNodeValue();
person.setName(p_name);
}else if ("age".equals(node_name)){
String p_age = children_node.getFirstChild().getNodeValue();
person.setAge(p_age);
}
}
personList.add(person);
}
personList.forEach((p)->System.out.println(p));
}
}
class Person{
private String name;
private String age;
private String id;
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", id='" + id + '\'' +
'}';
}
}
XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<Person>
<person person_id="p1">
<name>zy</name>
<age>18</age>
</person>
<person person_id="p2">
<name>zt</name>
<age>20</age>
</person>
</Person>

浙公网安备 33010602011771号