import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
public class Main {
public static void main(String[] args) throws Exception {
// write your code here
//selectAll();
//addElement();
//modifyElement();
//deleteElement();
listElement();
}
/**
* 解析xml文檔,並獲取文檔中元素的內容
*
* @throws Exception
*/
private static void selectAll() throws Exception {
//1.創建jaxp解析器工廠
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//2.創建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//3.解析xml文件,獲得文檔
Document document = builder.parse("src/person.xml");
//4.獲取文檔中的元素
NodeList nodeList = document.getElementsByTagName("name");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getTextContent());
}
}
/**
* 使用JAXP添加節點
*/
public static void addElement() throws Exception {
//1.創建jaxp解析器工廠
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//2.創建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//3.解析xml文件,獲得文檔
Document document = builder.parse("src/person.xml");
//4.獲取文檔中的元素
NodeList nodeList = document.getElementsByTagName("p1");
//5.獲取想要插入節點的父節點
Node p1 = nodeList.item(0);
//6.創建添加的元素
Element element = document.createElement("sex");
//7.添加元素的內容
Text text = document.createTextNode("nan");
element.appendChild(text);
p1.appendChild(element);
//8.回寫到文件中
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
}
/**
* 使用JAXP修改節點
*/
public static void modifyElement() throws Exception {
//1.創建jaxp解析器工廠
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//2.創建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//3.解析xml文件,獲得文檔
Document document = builder.parse("src/person.xml");
//4.獲取文檔中的元素
Node node = document.getElementsByTagName("sex").item(0);
//5.修改
node.setTextContent("nv");
//6.回寫到文件中
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
}
/**
* 使用JAXP刪除節點
*/
public static void deleteElement() throws Exception {
//1.創建jaxp解析器工廠
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//2.創建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//3.解析xml文件,獲得文檔
Document document = builder.parse("src/person.xml");
//4.獲取文檔中的元素
Node delNode = document.getElementsByTagName("sex").item(0);
//5.獲取想要插入節點的父節點
Node parentNode = delNode.getParentNode();
//6.刪除
parentNode.removeChild(delNode);
//7.回寫到文件中
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
}
/**
* 使用jaxp遍歷xml文檔中的節點(遞歸方法)
* @throws Exception
*/
public static void listElement() throws Exception{
//1.創建jaxp解析器工廠
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//2.創建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//3.解析xml文件,獲得文檔
Document document = builder.parse("src/person.xml");
//4.遞歸遍歷
list(document);
}
/**
* 遞歸遍歷節點的孩子節點
* @param node
*/
private static void list(Node node) {
if(node.getNodeType() == Node.ELEMENT_NODE){
System.out.println(node.getNodeName());
}
//得到第一層節點
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++){
//得到每個節點
Node chlidNode = nodeList.item(i);
list(chlidNode);
}
}
}