package com.xml.zh;
import javax.xml.parsers.*;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
public class XmlTest1{
/**
* 使用dom技术对xml进行解析
* @param args
* 从这里我发现: Node 是 Element, document的父类, Element类主要是
* 增加,删除,修改,返回 等。document 创建 xml中的对象
* 例:document.getElementById();方法。
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//创建一个documentBuilderFactory实例
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//创建一个documentBuilder
DocumentBuilder db=dbf.newDocumentBuilder();
//指定是那个xml文件
Document document = db.parse("src/class.xml");
//list(document);
//red(document);
update(document);
upda(document);
}
//修改
public static void update(Document doc){
//修改元素内容
Element ele = (Element)doc.getElementsByTagName("mingzi").item(0);
ele.setTextContent("xiaohai");
//修改属性
Element element = (Element)doc.getElementsByTagName("xuesheng").item(0);
element.setAttribute("sex", "nv");
}
//删除学生
public static void del(Document doc){
Node node = doc.getElementsByTagName("xuesheng").item(0);
//node.getParentNode().removeChild(node);
//删除属性
Element ele = (Element)node;
ele.removeAttribute("sex");
}
//添加学生到xml
public static void add(Document doc){
//取出这个元素
Element element = doc.createElement("xuesheng");
//添加属性
element.setAttribute("sex", "vc");
Element element_name = doc.createElement("mingzi");
element_name.setTextContent("xiaoming");
Element element_nianling = doc.createElement("nianling");
element_nianling.setTextContent("23");
Element element_jieshao = doc.createElement("jieshao");
element_jieshao.setTextContent("gi sh");
element.appendChild(element_name);
element.appendChild(element_nianling);
element.appendChild(element_jieshao);
//添加这个元素
doc.getDocumentElement().appendChild(element);
}
//更新java在xml文件中操作的内容
public static void upda(Document doc) throws Exception{
//创建一个TransformerFactory实例
TransformerFactory tff = TransformerFactory.newInstance();
//通过TransformerFactory 得到一个转换器
Transformer tf = tff.newTransformer();
//通过Transformer类的方法 transform(Source xmlSource, Result outputTarget)
//将 XML Source 转换为 Result。
tf.transform(new DOMSource(doc), new StreamResult("src/class.xml"));
}
//遍历xml文件的元素
public 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 n = (Node) nodelist.item(i);
list(n);
}
}
//获取document对象的 元素的 文本
public static void red(Document docu){
NodeList nodelist = docu.getElementsByTagName("xuesheng");
Element element = (Element)nodelist.item(0);
System.out.println(element.getAttribute("sex"));
System.out.println(element.getTextContent());
}
}