在java中,javax.xml.transform包中的transformer类用于xml文件的document对象转换为xml格式进行输出
在学习增删改查之前,我们先要了解xml的回写技术
1.对xml文档进行加载
2.回写xml,使用transfromer
首先我们要创建xml文档,具体如下:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name> 高效java </name>
<pirce>50 </pirce>
</book>
<book>
<name> java编程思想 </name>
<pirce> 80 </pirce>
</book>
</books>
下面是 java代码
/**
*
*/
package com.effective_java;
import java.io.File;
import java.util.jar.Attributes.Name;
import javax.lang.model.element.Element;
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.NodeList;
/**
* 这段代码的作用是对于xml的增删该改查,使用的dom解析的方式
*
*/
public class Model6 {
public static void main(String[] args) throws Exception {
//
File file = new File("value1\\model.xml");
// TODO 自动生成的方法存根
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
org.w3c.dom.Document document = builder.parse("value\\NewFile.xml");
// 前三句是将文件加载到内存
org.w3c.dom.Element newbook = document.createElement("book");// 创建了一个元素
org.w3c.dom.Element root = document.getDocumentElement();
root.appendChild(newbook);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
StreamResult streamResult = new StreamResult(file);
transformer.transform(domSource, streamResult);
// 最后实现回写
// 好的现在我们更改需求,对book增加子标签<name>可以这么坐
org.w3c.dom.Element bookname = document.createElement("name");
bookname.setTextContent("java编程词典");
newbook.appendChild(bookname);
transformer.transform(domSource, streamResult);// 回写
// 那么现在 我们再次学习设置新加入元素的属性
newbook.setAttribute("id", "text");
transformer.transform(domSource, streamResult);// 回写
// 接着我们对元素进行修改分下面几步
// .查询到指定元素(1:修改属性的值2:修改文本内容)
/**
* 1加载资源 2得到相应节点 3回写 上面的加载资源和回写我们已经实现过了,现在我们都只是实现其关键部分
*/
// 在这个例子中,我们以对书籍的pirce进行修改,将java编程思想价格降低到以前的80%;
NodeList nodeList = document.getElementsByTagName("name");// 获取到元素节点
for (int i = 0; i < nodeList.getLength(); i++) {
org.w3c.dom.Element element = (org.w3c.dom.Element) nodeList.item(i);
if (element.getTextContent().equals("java编程思想")) {
// 在xml中,我们可以看到pirce元素是element的兄弟的兄弟
org.w3c.dom.Element pirce = (org.w3c.dom.Element) element.getNextSibling().getNextSibling();
double d = Double.parseDouble(pirce.getTextContent());
String string = Double.toString(d * 0.8);
pirce.setTextContent(string);
System.out.println(d);
transformer.transform(domSource, streamResult);// 回写
}
}
//在实现了元素的修改过后,我们再来是想元素的删除工作,在删除中,
//只能通过父亲节点删除子节点,所哟我们要直接找到被删除节点的父节点
//然后才能进新删除
/**
* 同样,我们也要加载到内存,然后进行查找,最后进行删除
* 在这里,我们以实现删除带有java字样的节点元素
*/
NodeList no=document.getElementsByTagName("name");//进行全局定位,找到name节点
for(int i=0;i<no.getLength();i++){
org.w3c.dom.Element element1=(org.w3c.dom.Element)no.item(i);
if(element1.getTextContent().contains("java")){
org.w3c.dom.Element element3=(org.w3c.dom.Element)element1.getParentNode();
element3.getParentNode().removeChild(element3);
i--;//对i进行修正
}
transformer.transform(domSource, streamResult);// 回写
}
}
}
//本文章为原创,如果有任何问题,请与本人联系