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.sound.midi.Soundbank;
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.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.SQLOutput;
public class Main {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException, TransformerException {
Document document=createhead();
NodeList nodeList=document.getElementsByTagName("书");
System.out.println(nodeList.getLength());
//获取某个节点 index为索引
Node node=nodeList.item(1);
//获取某个节点里面的具体内容
String str=node.getTextContent();
System.out.println(str);
//list(node);
//addnode();
//insertnode();
//remove();
update();
}
//递归遍历子节点
private static Document createhead() throws ParserConfigurationException, IOException, SAXException {
//创建工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//用工厂对象创建一个解析器
DocumentBuilder builder=dbf.newDocumentBuilder();
//解析xml文件
Document document=builder.parse("xml/Book.xml");
//获取节点列表
return document;
}
private static void list(Node node){
//如果是空格就不用输出
if(node instanceof Element){
System.out.println(node.getNodeName());
}
NodeList nodeList=node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node child = nodeList.item(i);
list(child);
}
}
//增加节点的方法
private static void addnode() throws ParserConfigurationException, IOException, SAXException, TransformerException {
Document document=createhead();
//创建节点
Element element=document.createElement("作者");
//添加节点内容
element.setTextContent("创建节点");
Node node=document.getElementsByTagName("书").item(1);
node.appendChild(element);
//把创建的内容添加到xml文件中
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer tf=transformerFactory.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("xml/Book.xml")));
}
//在指定位置插入节点
private static void insertnode() throws IOException, SAXException, ParserConfigurationException, TransformerException {
Document document=createhead();
//创建节点
Element element = document.createElement("售价");
element.setTextContent("59.00元");
//得到参考节点
Element ref =(Element) document.getElementsByTagName("售价").item(0);
//在参考节点之前插入节点
Element book1 = (Element)document.getElementsByTagName("书").item(0);
book1.insertBefore(element, ref);
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer tf=transformerFactory.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("xml/Book.xml")));
}
//删除节点
private static void remove() throws IOException, SAXException, ParserConfigurationException, TransformerException {
Document document=createhead();
//得到目标节点
Element element= (Element) document.getElementsByTagName("书").item(1);
//得到删除的节点
Element element1= (Element) element.getElementsByTagName("作者").item(0);
element.removeChild(element1);
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer tf=transformerFactory.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("xml/Book.xml")));
}
//修改节点
private static void update() throws IOException, SAXException, ParserConfigurationException, TransformerException {
Document document=createhead();
Element element= (Element) document.getElementsByTagName("作者").item(0);
element.setTextContent("李太白");
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer tf=transformerFactory.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("xml/Book.xml")));
}
}