包括三个文件:studentInfo.xml(待解析的xml文件),DomBuilder.java(解析的主要类),TestDomBuilder.java(测试解析的结果),代码分别如下(由于使用csdn blog自带的代码粘贴工具会朝里加入一些"..."字符,虽然利于查看,但是不利于把代码copy出来运行,而亲自运行代码对程序员来说是很重要的,故没有使用csdn blog自带的代码粘贴工具来插入代码,而是用着用直白的方式):
studentInfo.xml
<?xml version="1.0" encoding="gb2312"?>
<student>
<person age="25"><!--如果没有age属性,默认的为20-->
<name>崔卫兵</name>
<college>PC学院</college>
<telephone>62354666</telephone>
<notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
</person>
<person>
<name>cwb</name>
<college leader="leader1">PC学院</college><!--如果没有leader属性,默认的为leader-->
<telephone>62358888</telephone>
<notes>男,1987年生,硕士,现就读于中国农业大学</notes>
</person>
<person age="45">
<name>xxxxx</name>
<college leader="">xxx学院</college>
<telephone>66666666</telephone>
<notes>注视中,注释中</notes>
</person>
<person age="">
<name>yyyyyy</name>
<college leader="学院领导">yyyy学院</college>
<telephone>88888888</telephone>
<notes>注视中111,注释中222</notes>
</person>
</student>
DomBuilder.java
package domExample;
import java.util.HashMap;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
* 用java自带的DOM工具实现对xml的编程
*
* @author cuiweibing
* @since 2007.8.9
*/
public class DomBuilder {
/**
* 执行具体的解析工作
* @param filename,待解析的既定格式的xml文件名(相对路径或者决定路径)
* @param hm ,HashMap 存放解析后的结果,供后继使用
*/
/**
* @param filename
* @param hm
*/
public void executeParser(String filename,HashMap<String,String> hm){
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
try {
//产生解析实例
DocumentBuilder dombuilder = domfac.newDocumentBuilder();
//把XML文件读入放在FileInputStream中,并用其父类InputStream的实例接受
InputStream is = new FileInputStream(filename);
//根据输入XML文件流解析成Document结构,供下面遍历与操作使用
Document doc = dombuilder.parse(is);
//获取根结点student
Element root = doc.getDocumentElement();
NodeList persons = root.getChildNodes();
//用于记录学生编号的变量
int num=-1;
if (persons != null) {
//遍历所有person节点
for (int i = 0; i < persons.getLength(); i++) {
Node person = persons.item(i);
if (person.getNodeType() == Node.ELEMENT_NODE) {
num++;
// 获取person节点的age属性的值
Node personNode=person.getAttributes().getNamedItem("age");
if(personNode!=null){
String age = personNode.getNodeValue();
if (age != null&&!age.equals("")) {
hm.put(person.getNodeName() + "-age" + num, age);
} else {
hm.put(person.getNodeName() + "-age" + num, "20");
}
}else {
hm.put(person.getNodeName() + "-age" + num, "20");
}
//遍历所有person节点的子节点
for (Node node = person.getFirstChild(); node != null; node = node
.getNextSibling()) {
if (node.getNodeType() == Node.ELEMENT_NODE) {
// 处理person节点的子节点name
if (node.getNodeName().equals("name")) {
String name = node.getNodeName();
//不可用此,dom中也认为<name>崔卫兵</name>中的"崔卫兵"也是节点,而且是name节点的子节点,不同于SAX
//String name = node.getNodeValue();
String nameValue = node.getFirstChild().getNodeValue();
hm.put(name + num, nameValue);
}
// 处理person节点的子节点college
else if (node.getNodeName().equals("college")) {
String name = node.getNodeName();
String nameValue = node.getFirstChild().getNodeValue();
hm.put(name + num, nameValue);
//获取college节点的leader属性的值
Node leaderNode=node.getAttributes().getNamedItem("leader");
if(leaderNode!=null){
String leader = leaderNode.getNodeValue();
if (leader != null&&!leader.equals("")) {
hm.put(node.getNodeName() + "-leader" + num, leader);
} else {
hm.put(node.getNodeName() + "-leader" + num, "leader");
}
}else {
hm.put(node.getNodeName() + "-leader" + num, "leader");
}
}
//处理person节点的子节点telephone
else if (node.getNodeName().equals("telephone")) {
String name = node.getNodeName();
String nameValue = node.getFirstChild().getNodeValue();
hm.put(name + num, nameValue);
}
//处理person节点的子节点notes
else if (node.getNodeName().equals("notes")) {
String name = node.getNodeName();
String nameValue = node.getFirstChild().getNodeValue();
hm.put(name + num, nameValue);
}
}
}
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 构造函数
*/
public DomBuilder() {
}
}
TestDomBuilder.java
package domExample;
import java.util.HashMap;
/**
* 测试DomBuilder解析的情况
* @author cuiweibing
* @since 2007.8.9
*/
public class TestDomBuilder {
public static void main(String[] args) {
try{
//获取解析完后的解析信息
HashMap<String,String> hashMap = new HashMap<String,String>();
DomBuilder db=new DomBuilder();
db.executeParser("studentInfo.xml", hashMap);
System.out.println("姓名/t年龄/t学院/t学院领导/t电话/t/t备注");
for(int i=0;i<hashMap.size();i+=6){
int j=i/6;
System.out.print(hashMap.get("name"+j)+"/t");
System.out.print(hashMap.get("person-age"+j)+"/t");
System.out.print(hashMap.get("college"+j)+"/t");
System.out.print(hashMap.get("college-leader"+j)+"/t");
System.out.print(hashMap.get("telephone"+j)+"/t");
System.out.println(hashMap.get("notes"+j)+"/t");
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
运行结果
姓名 年龄 学院 学院领导 电话 备注
崔卫兵 25 PC学院 leader 62354666 男,1982年生,硕士,现就读于北京邮电大学
cwb 20 PC学院 leader1 62358888 男,1987年生,硕士,现就读于中国农业大学
xxxxx 45 xxx学院 leader 66666666 注视中,注释中
yyyyyy 20 yyyy学院 学院领导 88888888 注视中111,注释中222
相关推荐
28.使用DOM和pull解析XML.rar28.使用DOM和pull解析XML.rar28.使用DOM和pull解析XML.rar android coolszy
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
jaxen-1.1.4.jar jaxen-1.1.4-sources.jar dom4j-2.0.3.jar dom4j-2.0.3-sources.jar dom4j-2.0.3-javadoc.jar
使用dom解析XML,演示了如何使用DOM的五个基本对象来解析xml。
使用DOM解析XML.docx
java dom解析xml <?xml version="1.0" encoding="UTF-8"?> <Head> <FileVersion>010000</FileVersion> <FileLength>00000CC3</FileLength> <FileTime>20100629173405</FileTime> <KeyIndex>1...
XML格式文档对于程序开发具有很重要的作用,QT利用Dom方式解析XML可以很方便的对数据进行存储于传输
java dom4 解析xml
java dom4j 解析xml文档 使用java操作xml 例如创建 读取 删除 等等
dom4j.jar的jar包,java解析xml文件的jar包,无脑好用~
Dom4j解析XML.pdf
在Java平台中如何来使用DOM解析xml文件,
解析XML所需的jar dom.jar
Java使用sax、dom、dom4j解析xml文档的代码,包含dom4j的jar包。
java使用dom解析服务器端xml文件
java解析xml并导入数据库(dom4j).doc
使用dom4j-1.6.1.jar和jaxen-1.1-beta-7.jar。比直接使用dom4j.jar更方便。解压后一个工程文件夹(可直接导入),一个辅助文件夹(dom4j源码、pdf教程和dom4j.chm帮助文档)。
压缩包内包含jaxen-1.1.1.jar和dom4j-1.6.1.jar两个jar包文件。这两个文件用于Java解析XML文件。涵盖了Java解析XML文件的主要类
java操作xml,包括dom、sax解析