如果一个程序需要进行DOM解析读取操作的话,需要按照如下的步骤进行:
1 建立DocumentBuilderFactory:
DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
2 建立DocumentBuilder:
DocumentBuilder builder = factory.newDocumentBuilder();
3 建立Document:
Document doc = builder.parse("要读取的文件路径");
4 建立NodeList :
NodeList nl = doc.getElementsByTagName("读取节点");
5 进行XML信息读取。
下面以一个具体的例子来实现。
首先,我们先建立一个名为1.xml的文件。代码如下:
<?xml version="1.0" encoding="GBK"?>
<linkman>
<name>
Runner
</name>
</linkman>
然后,我们需要建立一个解析类。
代码如下:
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
public class DOMDEMO
{
public static void main(String args[]) throws Exception{
//得到<span style="font-family: Arial, Helvetica, sans-serif;">DocumentBuilderFactory对象</span>
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到<span style="font-family: Arial, Helvetica, sans-serif;">DocumentBuilder对象</span>
DocumentBuilder build = factory.newDocumentBuilder();
Document doc = build.parse(new File("D:"+File.separator+"1.xml"));
//得到所有的linkman节点
NodeList n1 = doc.getElementsByTagName("linkman");
for(int x=0;x<n1.getLength();x++)
{
// quchu meiyige
Element e = (Element) n1.item(x);
System.out.println("name:"+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}
}
}
得到的解析结果如下:
DOM操作除了可以进行解析之外,也可以进行文件的生成。
如果要想生成XML文件,则在创建文档的时候,就应该使用的是newDocument();
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
public class DOMDEMO
{
public static void main(String args[]) throws Exception{
//
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//
DocumentBuilder build = factory.newDocumentBuilder();
//Document doc = build.parse(new File("D:"+File.separator+"1.xml"));
//!!!!!!!
Document doc = build.newDocument(); //创建一个新的xml文档
Element linkman = doc.createElement("linkman");
Element name = doc.createElement("name");
//设置节点内容
name.appendChild(doc.createTextNode("Runners"));
//设置各个节点的关系
linkman.appendChild(name);
doc.appendChild(linkman);
//得到所有的节点
NodeList n1 = doc.getElementsByTagName("linkman");
for(int x=0;x<n1.getLength();x++)
{
// quchu meiyige
Element e = (Element) n1.item(x);
System.out.println("name:"+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}
}
}
结果如下:
如果要将DOM文档输出本身比较麻烦。
代码如下:
import javax.xml.parsers.*;
import javax.xml.stream.util.StreamReaderDelegate;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
public class DOMDEMO
{
public static void main(String args[]) throws Exception{
//
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//
DocumentBuilder build = factory.newDocumentBuilder();
//Document doc = build.parse(new File("D:"+File.separator+"1.xml"));
//!!!!!!!
Document doc = build.newDocument(); //创建一个新的xml文档
Element linkman = doc.createElement("linkman");
Element name = doc.createElement("name");
//设置节点内容
name.appendChild(doc.createTextNode("Runners"));
//设置各个节点的关系
linkman.appendChild(name);
doc.appendChild(linkman);
//输出
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.ENCODING, "GBK"); //处理中文
DOMSource source = new DOMSource(doc); //准备输出文档
StreamResult result = new StreamResult(new File("D:"+File.separator+"output.xml")); //输出到文档中
t.transform(source, result); //直接找到数据源和结果
结果:在d盘中出现了一个新的文件。
打开output.xml文件,内容如下:
虽然xml代码比较难看,但是基本实现了文件的输出。