package com.g.demo1;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
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;
/*
* 使用DOM方式解析XMl文件
*/
public class Dmo2 {
public static void main(String[] args) throws Exception {
// getAll();
// save();
addsc();
}
// 往收藏信息.xml中添加节点
private static void addsc() throws Exception {
Document document = getDocument("Students.xml");
// 在内存中创建brand节点
Element brandElement = document.createElement("Brand");// <Brand></Brand>
// 给brand节点设置属性
brandElement.setAttribute("name", "苹果");// <Brand name="苹果"></Brand>
// 在内存中创建Type子节点 <Type name="iPhone4"/>
Element typeElement = document.createElement("Type");
typeElement.setAttribute("name", "iPhone4");
// brandElement添加子节点
brandElement.appendChild(typeElement);// <Brand name="苹果"><Type name="iPhone4"/></Brand>
NodeList nodeList = document.getElementsByTagName("name");
Element el = (Element) nodeList.item(0);
el.appendChild(brandElement);
//内存中dom对象
DOMSource domSource = new DOMSource(document);
//指定保存的路径
StreamResult streamResult = new StreamResult(new FileOutputStream("Students1.xml"));
//3, 指定路径将内存中的文档对象保存 xml文件中
//保存数据到Xml文件中
save(domSource, streamResult);
}
// 指定文档对象和目标存储位置保存数据
private static void save(DOMSource domSource, StreamResult streamResult)
throws TransformerFactoryConfigurationError, TransformerConfigurationException, TransformerException {
// 1,得到转换器工厂
TransformerFactory transformerFactory = TransformerFactory.newInstance();
// 2,得到转换器
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(domSource, streamResult);
System.out.println("成功");
}
// 指定路径获取问文档对象
private static Document getDocument(String path) throws ParserConfigurationException, SAXException, IOException {
// 1,创建解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2,基于解析器工厂获取解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 3, 指定xml文件 基于解析器对象 解析 返回的是一个文档对象
Document document = builder.parse(path);
return document;
}
// 获取所有信息
private static void getAll() throws ParserConfigurationException, SAXException, IOException {
Document document = getDocument("收藏信息.xml");
// 4,基于文档对象遍历DOM节点
NodeList nodeList = document.getElementsByTagName("Brand");
// 5,遍历nodelist集合 获取一个一个的brand节点
for (int i = 0; i < nodeList.getLength(); i++) {
// 得到一个一个的node节点
Node item = nodeList.item(i);
// 获取节点上的属性
Element brandel = (Element) item;
// 通过元素节点对象 根据属性名获取属性值
String attribute = brandel.getAttribute("name");
System.out.println(attribute);
// 根据父节点得到子节点
NodeList childNodes = brandel.getChildNodes();
// 遍历子节点
for (int j = 0; j < childNodes.getLength(); j++) {
Node item2 = childNodes.item(j);
// 先判断是不是elemen节点
if (item2.getNodeType() == 1) {
Element typeEl = (Element) item2;
String attribute2 = typeEl.getAttribute("name");
System.out.println(attribute2);
}
}
}
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<name>王显明<Brand name="苹果"><Type name="iPhone4"/></Brand><Brand name="苹果"><Type name="iPhone4"/></Brand></name>
<socre1>75</socre1>
<socre>80</socre>
宋佳 75 80