- JAVA项目文件
- package dom_jiexi;
- import java.io.File;
- import java.io.IOException;
- 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 org.junit.Test;
- import org.w3c.dom.Attr;
- 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;
- public class XmlCrudDemo {
- @Test
- public void test() throws ParserConfigurationException, SAXException,
- IOException, TransformerException {
- // 调用DocumentBuilderFactory中的newInstance(),创建新的DocumentBuilderFactory实例对象
- DocumentBuilderFactory builderFactory = DocumentBuilderFactory
- .newInstance();
- // 调用DocumentBuilderFactory中的newDocumentBuilder();创建一个新的Documentbuilder实例对象
- DocumentBuilder builder = builderFactory.newDocumentBuilder();
- // 调用DocumentBuilder中的parse(File f);方法创建指定文件的Document对象
- Document document = builder.parse(this.getClass().getClassLoader()
- .getResourceAsStream("dom_jiexi//java.xml"));
- String tagname = "王亮";
- // insert(document);
- // findByElementName(document);
- // findByName(document, "Boss姚");
- // findById(document, "x121");
- // deleteNodeById(document, "x121");
- // updateNodeById(document, "x121");
- insert(document, "x121");
- }
- // 向xml文件中指定的节点后添加节点
- public void insert(Document document, String id)
- throws TransformerException {
- // 获取要操作的元素节点对象
- Element elm = document.getElementById(id);
- // 获取该节点的父节点
- Node nodeparent = elm.getParentNode();
- // 通过传入的document对象创建一个指定的元素节点对象
- Element nd = document.createElement("student");
- // 设置属性并赋值
- nd.setAttribute("id", "x13333");
- // 创建元素节点对象
- Node name = document.createElement("name");
- Node age = document.createElement("age");
- Node sex = document.createElement("sex");
- // 为创建的元素节点对象的文本节点赋值
- name.setTextContent("donghongyujava");
- age.setTextContent("20");
- sex.setTextContent("男");
- // 将创建的子节点子节点的对象添加到子节点下
- nd.appendChild(name);
- nd.appendChild(age);
- nd.appendChild(sex);
- // 将子节点添加到父节点
- nodeparent.appendChild(nd);
- // 创建TransformerFactory对象
- TransformerFactory transformerFactory = TransformerFactory
- .newInstance();
- // Transformer类用来将代表xml文件的Document对象装换位某种格式后进行输出
- // Transformer对象通过TransformerFactory获得
- Transformer transformer = transformerFactory.newTransformer();
- // 将处理后的Document对象重新写入 到另一个xml文件
- transformer.transform(new DOMSource(document), new StreamResult(
- new File("src//c.xml")));
- }
- // 根据标签名称来查找所有改名称的节点对象
- public void findByElementName(Document document) {
- // 获取指定的标记名称的所有元素的节点集合
- NodeList nodelist = document.getElementsByTagName("teacher");
- System.out.println(nodelist.getLength());
- for (int i = 0; i < nodelist.getLength(); i++) {
- // 遍历得到集合中的每一个元素
- Node node = nodelist.item(i);
- System.out.println(node.getNodeName());
- }
- }
- // 根据属性的值查找节点对象
- public Node findByName(Document document, String tagname) {
- // 获取指定的标记名称的所有元素的节点集合
- NodeList nodelist = document.getElementsByTagName("teacher");
- for (int i = 0; i < nodelist.getLength(); i++) {
- // 遍历得到集合中的每一个元素
- Element node = (Element) nodelist.item(i);
- // 获取指定的元素中的指定的属性
- Attr attr = node.getAttributeNode("name");
- // 判断属性的值
- if (attr.getValue().equals(tagname)) {
- System.out.println(attr);
- // 返回符合条件的元素
- return node;
- }
- }
- return null;
- }
- // 根据ID产找节点对象
- public Node findById(Document document, String id) {
- Node node = document.getElementById(id);
- System.out.println(node);
- return node;
- }
- // 删除获取到的节点
- public void deleteNodeById(Document document, String id)
- throws TransformerException {
- // 获取要删除的节点对象
- Node node = document.getElementById(id);
- // 得到父节点后在删除子节点
- Node nod = node.getParentNode().removeChild(node);
- // 创建TransformerFactory对象
- TransformerFactory transformerFector = TransformerFactory.newInstance();
- // Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出
- // Transformer对象通过TransformerFactory获得
- Transformer transformer = transformerFector.newTransformer();
- // 调用transform();将Document对象重新写入一个XML文件中
- transformer.transform(new DOMSource(document), new StreamResult(
- new File("src//a.xml")));
- }
- // 更新指定数据
- public void updateNodeById(Document document, String id)
- throws TransformerException {
- // 根据id获取指定元素的节点对象
- Element node = document.getElementById(id);
- // 获取元素节点的id属性节点对象
- Attr attr = node.getAttributeNode("id");
- // 修改元素节点的属性值
- attr.setValue("x122");
- // 获取该节点的对象的所有孩子节点对象name,age,sex节点
- NodeList nodelist = node.getChildNodes();
- // 遍历集合
- for (int i = 0; i < nodelist.getLength(); i++) {
- // 得到每一个子节点的实体
- Node no = nodelist.item(i);
- // 判断是否是元素节点对象
- if (no.getNodeType() == Node.ELEMENT_NODE) {
- // 判断是否是name节点
- if (no.getNodeName().equals("name")) {
- // 设置name元素节点下的文本节点内容
- no.setTextContent("董宏宇");
- } else if (no.getNodeName().equals("age")) {
- no.setTextContent("20");
- } else if (no.getNodeName().equals("sex")) {
- no.setTextContent("男");
- } else {
- System.out.println("没有可修改元素节点对象");
- }
- }
- }
- // 创建TransformerFactory对象
- TransformerFactory transformerFactory = TransformerFactory
- .newInstance();
- // Transformer类用于把代表xml文件的Document对象转换为某种格式后进行输出
- // transformer对象通过transformerFactory获得
- Transformer transformer = transformerFactory.newTransformer();
- // 把更改后的document对象重新写入到一个xml文件中
- transformer.transform(new DOMSource(document), new StreamResult(
- new File("src//b.xml")));
- }
- }
XML文件
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE classes SYSTEM "bin//dom_jiexi//java.dtd">
- <classes>
- <java班 name="CSDNJava01班">
- <teachers>
- <teacher name="军哥" sex="男" age="28" />
- <teacher name="丽华" sex="女" age="28" />
- </teachers>
- <students>
- <student id="x121">
- <name>Martin</name>
- <sex>女</sex>
- <age>28</age>
- </student>
- </students>
- </java班>
- <!-- 注释0 -->
- <net班 name="CSDNNet01班">
- <teachers>
- <teacher name="Boss姚" sex="男" age="28" />
- <teacher name="石老师" sex="女" age="28" />
- </teachers>
- </net班>
- <php班 name="CSDNPhp01班"></php班>
- <ios班 name="CSDNIos01班"></ios班>
- </classes>
- <!-- 对java.xml文件进行CRUD的操作 -->
- <!-- 节点
- nodeName nodeValue nodeType
- element 标签名 null 1
- Attr 属性名 属性值 2
- text #text 文本的值 3
- -->
- <!ELEMENT classes (java班,net班,php班,ios班)>
- <!ELEMENT java班 (teachers?,students?)>
- <!ELEMENT net班 (teachers?,students?)>
- <!ELEMENT php班 (teachers?,students?)>
- <!ELEMENT ios班 (teachers?,students?)>
- <!ELEMENT teachers (teacher*)>
- <!ELEMENT teacher EMPTY>
- <!ELEMENT students (student*)>
- <!ELEMENT student (name,sex,age)>
- <!ATTLIST java班 name CDATA #IMPLIED>
- <!ATTLIST net班 name CDATA #IMPLIED>
- <!ATTLIST php班 name CDATA #IMPLIED>
- <!ATTLIST ios班 name CDATA #IMPLIED>
- <!ATTLIST teacher name CDATA #IMPLIED>
- <!ATTLIST teacher sex CDATA #IMPLIED>
- <!ATTLIST teacher age CDATA #IMPLIED>
- <!ELEMENT name (#PCDATA)>
- <!ELEMENT sex (#PCDATA)>
- <!ELEMENT age (#PCDATA)>
- <!ATTLIST student id ID #IMPLIED>