package homework1201.test04;
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.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class DocumentDemo {
Document doc;
public void getDocument(){
//创建解析器工厂对象
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
try {
//通过解析器工厂对象创建解析器
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//通过解析器指定xml文件创建document对象
doc = documentBuilder.parse("src/homework1201/test04/手机收藏.xml");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
public void show(){
//以document对象为起点操作dom树
NodeList nodeList = doc.getElementsByTagName("Brand");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
System.out.println("品牌:"+element.getAttribute("name"));
NodeList nodeType = element.getChildNodes();
for (int j = 0; j < nodeType.getLength(); j++) {
Node node = nodeType.item(j);
if(node.getNodeType() == Node.ELEMENT_NODE){
Element elementType = (Element) node;
System.out.println("\t\t型号:"+elementType.getAttribute("name"));
}
}
}
//save("src/homework1201/test04/手机收藏.xml");
}
public void save(String path){
//获得TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory.newInstance();
try {
// 创建Transformer对象
Transformer transformer = transformerFactory.newTransformer();
// 设置输出属性
// 编码格式
transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");
// 创建DOMSource对象
// 包含XML信息
DOMSource source = new DOMSource(doc);
// 创建StreamResult对象
StreamResult result = new StreamResult(new FileOutputStream(path));
// 包含保存文件的信息
// 将XML保存到指定文件中
transformer.transform(source,result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public void add(){
Element brand = doc.createElement("Brand");
brand.setAttribute("name","三星");
Element type = doc.createElement("name");
type.setAttribute("name","Note4");
brand.appendChild(type);
doc.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);
save("src/homework1201/test04/手机收藏.xml");
}
public void addId(){
NodeList list = doc.getElementsByTagName("Brand");
for (int i = 0; i < list.getLength(); i++) {
Element element = (Element) list.item(i);
if(element.getAttribute("name").equals("苹果")){
element.setAttribute("id","1");
}
}
save("src/homework1201/test04/手机收藏.xml");
}
public void delete(){
NodeList list = doc.getElementsByTagName("Brand");
for (int i = 0; i < list.getLength(); i++) {
Element element = (Element) list.item(i);
if(element.getAttribute("name").equals("华为")){
element.getParentNode().removeChild(element);
}
}
save("src/homework1201/test04/手机收藏.xml");
}
public static void main(String[] args) {
DocumentDemo documentDemo = new DocumentDemo();
documentDemo.getDocument();
// documentDemo.show();
// documentDemo.add();
// System.out.println("======");
// documentDemo.addId();
// documentDemo.delete();
// documentDemo.show();
}
}