XML的四种解析方式之DOM
来源:互联网 发布:开淘宝店怎么寻找货源 编辑:程序博客网 时间:2024/05/17 20:22
1.DOM
XML解析的主要作用:可以使用DOM读取或者输出XML文件。
所有的XML文件都是由节点保存内容的,所谓的解析操作指的就是从指定的节点之中将内容读取进来。
在XML文件中由于更多的是描述信息的内容,所以在得到一个XML文档之后应该利用程序按照里面元素的定义名称取出对应的内容,这样的操作就称为XML解析,在XML解析中W3C定义了SAX和DOM两种解析方式。
JavaScript中的解析操作主要以DOM为主。
DOM(Document Object Model,文档对象模型),在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。
Dom_01.xml的内容如下:
<?xml version="1.0" encoding="GBK" standalone="no"?>
<addresslist>
<linkman>
<name>李兴华</name>
<email>mldnqa@163.com</email>
</linkman>
<linkman>
<name>MLDN</name>
<email>mldnkf@163.com</email>
</linkman>
</addresslist>
该文件对应的DOM树如下:
每个文字区域也称为一个节点称为文字节点。
DOM解析过程
Dom02.xml的内容如下:
<?xml version="1.0" encoding="GBK" standalone="no"?>
<addresslist>
<name>李兴华</name>
</addresslist>
通过程序对该文件进行解析。【需要java帮助文档】。DOMDemo.java的内容如下:
package org.skewrain.xml.dom;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class DOMDemo {
public static void main(String args[]) throws Exception {
//取得DocumentBuilderFactory类的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//取得DocumentBuilder类的对象
DocumentBuilder build = factory.newDocumentBuilder();
Document doc = build.parse(new File("D:"+File.separator + "dom_02.xml"));
NodeList nl = doc.getElementsByTagName("name");
//输出节点
System.out.println("姓名:"+nl.item(0).getFirstChild().getNodeValue());
}
}
在cmd中以此运行:
Javac -d . DOMDemo.java
Java org.skewrain.xml.dom.DOMDemo
运行结果为:
Dom_03.xml的内容如下:
<?xml version="1.0" encoding="GBK" standalone="no"?>
<addresslist>
<linkman>
<name>斜雨</name>
<email>skewrain@foxmail.com</email>
</linkman>
<linkman>
<name>skewrain</name>
<email>skewrain@foxmail.com</email>
</linkman>
</addresslist>
通过程序对该文件进行解析。
DOMDemo2.java的内容如下:
package org.skewrain.xml.dom;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class DOMDemo2 {
public static void main(String args[]) throws Exception {
//取得DocumentBuilderFactory类的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//取得DocumentBuilder类的对象
DocumentBuilder build = factory.newDocumentBuilder();
Document doc = build.parse(new File("D:"+File.separator + "dom_03.xml"));
//得到所有的linkman节点
NodeList nl = doc.getElementsByTagName("linkman");
for(int x=0;x<nl.getLength();x++){
Element e = (Element)nl.item(x); //取出每一个元素
System.out.println("姓 名:" + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
System.out.println("邮 箱:" + e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
}
}
}
在cmd中分别执行:cd d:
Javac -d . DOMDemo2.java
Java org.skewrain.xml.dom.DOMDemo2
执行结果如下:
DOM操作除了可以进行解析之外,也可以进行文件的生成。
如果要想生成XML文件,则在创建文档的时候,就应该使用的是newDocument();。
现在我们想生成一个XML格式的文档。
<?xml version=”1.0” encoding=”GBK”?>
<addresslist>
<linkman>
<name>斜雨-北风</.name>
<email>skewrain@foxmail.com</email>
</linkman>
</addresslist>
在DOMDemo3.java代码中的内容为:
package org.skewrain.xml.dom;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class DOMDemo3 {
public static void main(String args[]) throws Exception {
//取得DocumentBuilderFactory类的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//取得DocumentBuilder类的对象
DocumentBuilder build = factory.newDocumentBuilder();
Document doc = build.newDocument();//创建一个新的XML文档。
Element addresslist = doc.createElement("addresslist");
Element linkman = doc.createElement("linkman");
Element name = doc.createElement("name");
Element email = doc.createElement("email");
//设置节点内容
name.appendChild(doc.createTextNode("斜雨-北风"));
email.appendChild(doc.createTextNode("skewrain@foxmail.com"));
//设置各个节点的关系
linkman.appendChild(name);//name是linkman的子节点
linkman.appendChild(email);
addresslist.appendChild(linkman);
doc.appendChild(addresslist);
//得到所有的linkman节点
NodeList nl = doc.getElementsByTagName("linkman");
for(int x=0;x<nl.getLength();x++){
Element e = (Element)nl.item(x); //取出每一个元素
System.out.println("姓 名:" + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
System.out.println("邮 箱:" + e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
}
}
}
运行的结果为:
DOM的难点在于将文档的内容输出保存到文件中。下面的代码的作用是将文档的内容输出到新生成的文件中。
package org.skewrain.xml.dom;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
public class DOMDemo3 {
public static void main(String args[]) throws Exception {
//取得DocumentBuilderFactory类的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//取得DocumentBuilder类的对象
DocumentBuilder build = factory.newDocumentBuilder();
Document doc = build.newDocument();//创建一个新的XML文档。
Element addresslist = doc.createElement("addresslist");
Element linkman = doc.createElement("linkman");
Element name = doc.createElement("name");
Element email = doc.createElement("email");
//设置节点内容
name.appendChild(doc.createTextNode("斜雨-北风"));
email.appendChild(doc.createTextNode("skewrain@foxmail.com"));
//设置各个节点的关系
linkman.appendChild(name);//name是linkman的子节点
linkman.appendChild(email);
addresslist.appendChild(linkman);
doc.appendChild(addresslist);
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);
//得到所有的linkman节点
NodeList nl = doc.getElementsByTagName("linkman");
for(int x=0;x<nl.getLength();x++){
Element e = (Element)nl.item(x); //取出每一个元素
System.out.println("姓 名:" + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
System.out.println("邮 箱:" + e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
}
}
}
在编译运行之后,可以发现新生成了一个output.xml的文件,文件的内容如下:
<?xml version="1.0" encoding="GBK" standalone="no"?><addresslist><linkman><name>斜雨-北风</name><email>skewrain@foxmail.com</email></linkman></addresslist>
通过以上的例子,我们可以看出,DOM可以实现文件的读取及修改操作,但使用的更多的是读取操作。
- XML的四种解析方式之DOM
- Java解析XML文件的四种方式之DOM解析
- 解析xml的四种方式:DOM JDOM DOM4J SAX
- java解析xml四种方式(1)-DOM方式
- XML之DOM解析方式
- DRP项目(七)----XML的四种解析器之DOM解析XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- DOM,SAX,JDOM,DOM4J 四种方式解析xml
- DOM,SAX,JDOM,DOM4J 四种方式解析xml
- XML--Java中的四种常见解析方式--dom
- android解析xml文件的方式之DOM解析
- DOM的方式解析XML
- Dom、Sax、JDOM和Dom4j四种方式解析XML文件小Demo和四种方式的大概比较
- xml生成、解析的四种方式,dom、sax、dom4j、jdom
- java 解析xml的四种方式:sax,dom,dom4j,jdom
- style、currentStyle、runtimeStyle详解
- JBPM具体应用之流程变量与任务变量
- IE6 WEB开发调试插件:IE Developer Toolbar
- 老兵贺苏-30驱日机:是我们的作风(1)
- C#基础复习
- XML的四种解析方式之DOM
- DOM解析XML
- poj 1321
- java 2013-1
- oracle中的函数
- AMR音频编码器概述及文件格式分析
- 如何连续的测量蓝牙的RSSI
- hibernate实践之一
- 怎么去掉图片作为超链接时出现的框框