XML文件不受编程语言和操作系统的限制,因此成为了一种通用的数据交互格式。
下面是以DOM方法解析XML文件。DOM解析以文档树的格式将XML文件全部解析到内存中,
因此XML文件的大小将影响到解析时长。
1、获取Document对象
Document document=null;
private void getDocument() throws ParserConfigurationException, IOException, SAXException {
//创建解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//创建解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
//设置解析的xml文件
document = builder.parse("student.xml");
}
2、获取根节点
private void getShowInfo() {
//获取根节点
Element root = document.getDocumentElement();
//获取根节点下的子节点集合
NodeList childNodes = root.getChildNodes();
//调用遍历子节点集合的方法
showChildNodes(childNodes);
}
3、获取所有子节点并输出(展示所有的年级和学生信息)
private void showChildNodes(NodeList childNodes) {
//遍历子节点集合
for (int i = 0; i < childNodes.getLength(); i++) {
//获取父节点下每一个子节点
Node item = childNodes.item(i);
//判断该节点类型是否为元素节点。这里可以避免下一步操作因空格符导致的类转换失败
if(item.getNodeType() == Node.ELEMENT_NODE){
//将Node类型转换为Element类型
Element ele = (Element) item;
//输出标签名称和指定属性值
System.out.println(ele.getTagName()+"\t"+ele.getAttribute("name"));
//递归,用于输出所有的子节点
showChildNodes(ele.getChildNodes());
}
}
}
4、 实现向XML文件中添加第三个学生王五
private void addInfo() {
//创建stu元素节点
Element stu = document.createElement("stu");
//为stu元素赋予属性
stu.setAttribute("name","第三个学生");
//创建stuNo元素节点
Element type1 = document.createElement("stuNo");
//为stuNo元素赋予属性
type1.setAttribute("name","1003");
//创建stuName元素节点
Element type2 = document.createElement("stuName");
//为stuName元素赋予属性
type2.setAttribute("name","王五");
//将stuNo和stuName元素作为子节点放入stu元素节点中
stu.appendChild(type1);
stu.appendChild(type2);
//获取根节点
Element element= document.getDocumentElement();
//获取根节点下子节点集合
NodeList childNodes = element.getChildNodes();
//遍历子节点集合
for(int i=0;i
增删改操作最后都需要进行转换才能真正的实现数据交互
private void save() {
try {
//创建转换器工厂对象
TransformerFactory factory = TransformerFactory.newInstance();
//创建转换器对象
Transformer transformer =factory.newTransformer();
//设置格式(指定转换器是否进行缩进)
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
//设置源(解析XML文件的document对象,这里就是student.xml文件)
DOMSource source = new DOMSource(document);
//设置目标位置
StreamResult result = new StreamResult(new File("student.xml"));
//进行转换
transformer.transform(source,result);
} catch (TransformerException e) {
throw new RuntimeException(e);
}
}
5、为所有的年级和学生stu加上编号id
private void updateInfo() {
//获取所有gradeName年级元素节点
NodeList gradeList = document.getElementsByTagName("gradeName");
//遍历gradeName年级元素节点集合
for(int i=0;i
6、 删除张三的学生信息
private void deleteInfo() {
//获取所有stu学生元素节点
NodeList stuList = document.getElementsByTagName("stu");
//遍历stu学生元素节点集合
for(int i = 0;i
7、最后main方法执行测试
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
Stu stu = new Stu();
stu.getDocument();
stu.getShowInfo();
stu.addInfo();
stu.updateInfo();
stu.deleteInfo();
}
package Homemork.XML;
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;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.IOException;
public class Stu {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
Stu stu = new Stu();
stu.getDocument();
stu.getShowInfo();
stu.addInfo();
stu.updateInfo();
stu.deleteInfo();
}
Document document=null;
private void deleteInfo() {
NodeList stuList = document.getElementsByTagName("stu");
for(int i = 0;i
这是以DOM的方式解析XML文件的基本练习
下期出DOM4j解析XML文件!!!