package com.pan.litestruts;
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;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class JaxpDomUtil {
public static final String XMLPATH = JaxpDomUtil.class.getClassLoader().getResource("struts.xml").getPath();
/**
* 通过 解析器 获取到 Document
* @return
*/
public static Document getDocument() {
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory
.newDocumentBuilder();
Document document = documentBuilder.parse(XMLPATH);
return document;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 回写 XML 方法
* @param document
*/
public static void tranFormMethod(Document document) {
try {
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(
XMLPATH));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 递归调用 获取所有的元素 并打印元素名称
* @param node
*/
private static void listElement(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 nodeChild = nodelist.item(i);
// 递归调用
listElement(nodeChild);
}
}
/**
* 获取所有的 元素名称
*/
public static void getListElement() {
Document document = JaxpDomUtil.getDocument();
listElement(document);
}
/**
* 删除<sex>nan</sex>节点
*/
public static void delSex() {
Document document = JaxpDomUtil.getDocument();
// 获取<sex>元素
Node nodeSex = document.getElementsByTagName("sex").item(0);
// 得到父节点
Node parent = nodeSex.getParentNode();
// 通过父节点删除
parent.removeChild(nodeSex);
// 回写XML
JaxpDomUtil.tranFormMethod(document);
}
/**
* 修改 sex 标签的 内容为nv
*/
public static void modifySex() {
Document document = JaxpDomUtil.getDocument();
Node nodeSex = document.getElementsByTagName("sex").item(0);
nodeSex.setTextContent("nv");
JaxpDomUtil.tranFormMethod(document);
}
/**
* 为第一个p1 增加 <sex>nv</sex>
*/
public static void addSex(){
Document document = JaxpDomUtil.getDocument();
Node p1Node = document.getElementsByTagName("p1").item(0);
//通过 Document 创建 Element
Element sexElement = document.createElement("sex");
sexElement.setTextContent("nv");
p1Node.appendChild(sexElement);
JaxpDomUtil.tranFormMethod(document);
}
/**
* 查询xml中第一个name元素的值
*/
public static void selectSin(){
Document document = JaxpDomUtil.getDocument();
Node nameNode = document.getElementsByTagName("name").item(0);
String name = nameNode.getTextContent();
System.out.println(name);
}
/**
* 查询所有name元素的值
*/
public static void selectAll(){
Document document = JaxpDomUtil.getDocument();
NodeList nodeList = document.getElementsByTagName("name");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getTextContent());
}
}
}