Posted on 2005-01-21 23:10
wxb_nudt 阅读(569)
评论(0) 编辑 收藏
在qq群中聊到了DOM,foxcrane要写一个替换Node的程序,DOM的原理了解,也下载和配置了xerces-2_6_2,就是没有时间写个,于是打开Eclipse,new了一个Java Project,在构建路径中把Xerces的jar包一古脑加了进去。然后写了一个最简单的DOM程序,要解析XML文件来自于前段时间写的一个XML。因为明白DOM的原理,只用了5分钟就搞定了这个DOM HelloWorld。
package main;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
* @author wxb
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class DOMTestMain {
public static void main(String[] args) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
Document doc=null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
try {
doc = db.parse("DOMTestXML.xml");
} catch (SAXException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
NodeList nl = doc.getElementsByTagName("email");
for(int i =0;i Node my_node = nl.item(i);
String message = my_node.getFirstChild().getNodeValue();
System.out.println(message);
}
NodeList n2 = doc.getElementsByTagName("link");
Node node1 = n2.item(1);
NamedNodeMap map = node1.getAttributes();
Node subnode=map.getNamedItem("manager");
System.out.println(subnode.getNodeValue());
}
}
解析的DOMTestXML.xml就放在当前目录,为了方便,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<personnel>
<person id="Big.Boss">
<name><family>Boss</family> <given>Big</given></name>
<email>chief@foo.com</email>
<link subordinates="one.worker two.worker three.worker four.worker five.worker"/>
</person>
<person id="one.worker">
<name><family>Worker</family> <given>One</given></name>
<email>one@foo.com</email>
<link manager="Big.Boss"/>
</person>
<person id="two.worker">
<name><family>Worker</family> <given>Two</given></name>
<email>two@foo.com</email>
<link manager="Big.Boss"/>
</person>
<person id="three.worker">
<name><family>Worker</family> <given>Three</given></name>
<email>three@foo.com</email>
<link manager="Big.Boss"/>
</person>
<person id="four.worker">
<name><family>Worker</family> <given>Four</given></name>
<email>four@foo.com</email>
<link manager="Big.Boss"/>
</person>
<person id="five.worker">
<name><family>Worker</family> <given>Five</given></name>
<email>five@foo.com</email>
<link manager="Big.Boss"/>
</person>
</personnel>
输出如下:
chief@foo.com
one@foo.com
two@foo.com
three@foo.com
four@foo.com
five@foo.com
Big.Boss
解析了6个节点值和一个节点属性。Eclipse的自动import功能实在是太帅了,如果没有这个功能,光是import可能就不止20分钟把。