向xml文件中添加元素;
未添加前的xml文档;
添加元素创建的新文件
新文件中的xml元素;
DOM获取元素的思路:XML的DOM解析技术详解
DOM技术添加元素的思路;
1,获得节点
2,创建元素createElement .内容createTextNode ,元素属性createAttribute
3实例化xml转化器
4,创建xml转化的工厂
5,获得要添加元素的节点
6,创建输出流,将新文档写出去
7,使用转化器来装换
JAVA实现代码如下;代码已经打包
基本属性;
package Dom解析;
/**
* 设置对象的基本属性
* @author Administrator
*
*/
public class Student {
String name;
String sex;
String cla;
int no;
int num;
}
转换;
package Dom解析;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
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.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
/**
* 添加元素到xml文档中去
* doc.createElement添加元素
* doc.createTextNode创建元素的内容
* doc.createAttribute创建元素的属性
*
* @author Administrator
*
*/
public class ADDelements {
private static List<Student> liststu = new ArrayList<Student>();
private static Student stu;
public static void main(String[] args) throws Exception {
String path = "C:\\Users\\Administrator\\Desktop\\xml\\student2.xml";
// 实例化一个用来创建工厂对象的DOM解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 创建解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 创建解析器需要解析的xml文档路径
Document doc = builder.parse(path);
/*
* 向xml文档中添加元素
*/
// NodeList nodelist1 = doc.getElementsByTagName("stu");
// Node node11 = nodelist1.item(2);
// Text text1 = doc.createTextNode("男");
// node11.appendChild(text1);
//获得节点
Node nodelast =doc.getLastChild();
//添加标签
Element e1 =doc.createElement("stu");
nodelast.appendChild(e1);
//添加元素的属性
Attr atrr = doc.createAttribute("no");
atrr.setValue("12343");
e1.setAttributeNode(atrr);
//添加标签createElement
Element e2 = doc.createElement("name");
e1.appendChild(e2);
//添加元素createTextNode
Text text2 =doc.createTextNode("杨过");
e2.appendChild(text2);
//添加标签createElement
// Element e4 = doc.createElement("sex");
// e1.appendChild(e4);
// Text text3=doc.createTextNode("男");
// e4.appendChild(text3);
Element e6 = doc.createElement("sex");
e6.setTextContent("女");
e1.appendChild(e6);
//添加标签createElement
Element e5 = doc.createElement("cla");
e1.appendChild(e5);
Text text4=doc.createTextNode("古墓");
e5.appendChild(text4);
//将dom文档转化为xml文档
//实例化转化xml的文档
TransformerFactory transfactory = TransformerFactory.newInstance();
//创建转化器
Transformer transformer=transfactory.newTransformer();
//获得需要添加元素的根节点的资源
DOMSource xmlSource = new DOMSource(nodelast);
//输出流
String file = "C:\\Users\\Administrator\\Desktop\\xml\\student3.xml";
StreamResult outputTarget = new StreamResult(new FileOutputStream(file));
//开始转换
transformer.transform(xmlSource, outputTarget);
printxml(doc);
for (Student stu : liststu) {
System.out.println(stu.name + " " + stu.no + " " + stu.num + ""
+ stu.sex + " " + stu.cla);
}
}
/**
* 解析xml文档内容的方法
* @param node 传入的Document新的对象
*/
public static void printxml(Node node) {
// 得到所有的子节点
NodeList list = node.getChildNodes();
// 遍历Nodelist中的子节点
for (int i = 0; i < list.getLength(); i++) {
Node node1 = list.item(i);
// 获得节点的所有名称
String str = node1.getNodeName();
// System.out.println(str);
// 判断node1是不是元素
if (node1 instanceof Element) {
if (str.equals("stu")) {
stu = new Student();
liststu.add(stu);
// 获得元素标签的属性
NamedNodeMap mnm = node1.getAttributes();
for (int j = 0; j < mnm.getLength(); j++) {
Node nodes = mnm.item(j);
String name = nodes.getNodeName();
String val = nodes.getNodeValue();
if (name.equals("no")) {
stu.no = Integer.parseInt(val);
}
if (name.equals("num")) {
stu.num = Integer.parseInt(val);
}
}
}
// 都得到标签元素的内容
if (str.equals("name")) {
stu.name = node1.getTextContent();
}
if (str.equals("sex")) {
stu.sex = node1.getTextContent();
}
if (str.equals("cla")) {
stu.cla = node1.getTextContent();
}
}
printxml(node1);
}
}
}
DOM解析与添加只能对少量数据进行操作,并且代码的步骤都是固定的;