DOM解析与添加技术

向xml文件中添加元素;

    未添加前的xml文档;


DOM解析与添加技术
 

添加元素创建的新文件


 

 

新文件中的xml元素;


DOM解析与添加技术
 

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解析与添加只能对少量数据进行操作,并且代码的步骤都是固定的;

你可能感兴趣的:(xml解析,DOM添加元素)