XML文件:文件要放在项目根目录下
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001">
<姓名>张三</姓名>
<年龄>12</年龄>
<性别>男</性别>
</student>
<student id="002">
<姓名>张三</姓名>
<年龄>12</年龄>
<性别>男</性别>
</student>
</students>
解析代码:
package TEST;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class A {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultInstance(); //创建DOM解析器工厂实例
DocumentBuilder db = dbf.newDocumentBuilder(); //从DOM工厂获取DOM解析器
Document doc = db.parse("Student.xml"); //解析XML文档,得到Document,即DOM树
NodeList students = doc.getElementsByTagName("student"); //获得节点为student的节点集合(即两个student节点)
System.out.println("节点个数:"+students.getLength()); //输出节点集合中的节点个数
for(int i = 0; i<students.getLength();i++) {
Node student = students.item(i); //得到节点集合中的一个节点student(其中一个student节点)
Element element = (Element)student; //将这个节点强转成标签(将这个节点转成标签,便于取元素)
String id = element.getAttribute("id"); //得到属性(student中的属性id)
System.out.println(id); //输出属性id
NodeList stu_child = student.getChildNodes(); //取出student节点下的所有子节点,放到节点集合stu_child中(姓名、年龄、性别)
for(int j = 0; j<stu_child.getLength(); j++) { //循环输出每个节点(姓名、年龄、性别)
if(stu_child.item(j).getNodeType() == Node.ELEMENT_NODE) { //判断节点类型为我们写的元素节点(排除掉空格换行)
//stu_child代表student节点下的整体(姓名、年龄、性别),stu_child.item(j)代表每个节点,stu_child_item(j).getNodeName()代表节点名称(姓名..)
//举例:stu_child.item(j).getFirstChild()代表姓名下的节点张三
//举例:stu_child.item(j).getFirstChild().getNodeValue()代表姓名节点下的节点张三的值(即为张三)
System.out.println(stu_child.item(j).getNodeName() + "->" + stu_child.item(j).getFirstChild().getNodeValue());
}
}
}
}
}