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>