DOM解析xml和插入创建

import java.io.File;
import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.apache.crimson.tree.XmlDocument;


/**
 * 
 *DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。
 *就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想
 *DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。
 *分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,
 *因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。
 *首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。
 *它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多
 */


public class DomXmlReader {
	
	//读取
	public void reader()
	{
		
		try {
			
			//解析器工厂类 产生documentBuiderFactory工厂对象
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			
			//通过解析器工厂类来获得
			DocumentBuilder dombulid = dbf.newDocumentBuilder();
			
			//构建文件对象
			File f = new File("F:\\aa.xml");
			
			//取得文件的根
			Document dom = dombulid.parse(f);
			
			//取得二级目录中的内容
			NodeList nodes = dom.getElementsByTagName("VALUE");
			
			for (int i = 0; i < nodes.getLength();i++)
			{
				//取得i对应的no节点
				Node noNode = dom.getElementsByTagName("NO").item(i).getFirstChild();
				
				System.out.println("=======NO======"+noNode.getNodeValue());
				
				//取得i对应的ADDR节点
				Node addrNode = dom.getElementsByTagName("ADDR").item(i).getFirstChild();
				
				System.out.println("==========ADDR========"+addrNode.getNodeValue());
				
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	//插入
	public void innerXml()
	{
		try {
			
			//解析器工厂类 产生documentBuiderFactory工厂对象
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			
			//通过解析器工厂类来获得
			DocumentBuilder dombulid = dbf.newDocumentBuilder();
			
			//构建文件对象
			File f = new File("F:\\aa.xml");
			
			//取得文件的根
			Document dom = dombulid.parse(f);
			
			//得到文档名称为RESULT的元素的节点列表
			NodeList nodes = dom.getElementsByTagName("RESULT");
			
			Element result = (Element) nodes.item(0);
			
			//创建名称为value的元素
			Element value = dom.createElement("VAVLUE");
			
			value.setAttribute("id", "test");
			//添加NO元素
			Element no = dom.createElement("NO");
			
			no.appendChild(dom.createTextNode("添加"));
			
			value.appendChild(no);
			
			result.appendChild(value);
			
			((XmlDocument)dom).write(new FileOutputStream("f:\\bb.xml"));
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		
		DomXmlReader xml = new DomXmlReader();
		
		xml.reader();
		
		xml.innerXml();
	}
}
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE RESULT>

<RESULT>
	
  <VALUE>
		
    <NO>Abc</NO>
		
    <ADDR>xx省XX县XX镇XX路X段XX号</ADDR>
	
  </VALUE>
	
  <VALUE>
		
    <NO>Bcd</NO>
		
    <ADDR>xx省XX市XX乡XX村XX组</ADDR>
	
  </VALUE>

  
</RESULT>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值