简析JAVA的XML编程

31、JAVA进阶——XML知识 一、认识XML 二、XML文档结构 1. XML声明 2. 标签 3. 根元素 4. 元素 5. 属性 6. XMl中的特殊字符处理 7. XML中的注释 8. 格式良好的XML文档 三、XML优势 四、XML中的命名空间 1. 命名空间的必要性 2. 声明命名空间 3. 属性和命名空间 4. 命名空间的应用 阅读详情
  XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等)也都把支持XML开发作为宣传口号之一 。由于笔者所从事的电子政务开发较早的引入了XML,所以尝到了许多甜头,在许多项目中利用XML数据交换信息,省去了许多麻烦事,不用制定繁锁的数据格式,利用XML数据易于表达,也利于一线开发者跟踪调试。

        笔者先前也曾发表过相关的文章,比如《简析Delphi中的XML编程》一文,有兴趣的读者可以到Google(http://www.google.com)去搜索一下,有很多媒体转载。今天笔者想探讨的是关于JAVA中的XML编程,希望对正在或想要学习XML编程的新老读者有所帮助。

        在XML应用中,最常用也最实用的莫过于XML文件的读写,所以笔者通过一个简单的XML文件读写来作简要分析。可以在任何文本编辑器中先建立如下结构的XML文件,类似于HTML结构,但XML语义比较严格,起始标记必须配对,比如"〈学生花名册〉"与"〈/学生花名册〉"对应,空格多少可不必在意,但一般都以缩格形式书写,便于阅读。把此文件命名为Input.xml,可以在任何支持XML的浏览器中打开测试一下,如果输入正确,在浏览中可以看到此文件的树形表示结构。如果您还对XML结构感到比较陌生,建议先看看《简析Delphi中的XML编程》一文中关于XML文件的说明。

<?xml version="1.0" encoding="GB2312"?>
<学生花名册>
<学生 性别 = "男">
<姓名>李华</姓名> 
<年龄>14</年龄>
<电话>6287555</电话>
</学生>
<学生 性别 = "男">
<姓名>张三</姓名>
<年龄>16</年龄>
<电话>8273425</电话>
</学生>
</学生花名册>

  准备工作做完后,接着就开始写实质性的JAVA代码了。为保存从XML文件读入的信息,需要先建一个简单的Bean来保存学生信息,命名为StudentBean,代码如下所示:

public class StudentBean {
private String sex; //学生性别
private String name; //学生姓名
private int age; //学生年龄
private String phone; //电话号码

public void setSex(String s) {
sex = s;
}
public void setName(String s) {
name = s;
}
public void setAge(int a) {
age = a;
}
public void setPhone(String s) {
phone = s;
}
public String getSex() {
return sex;
}
public String getName() {
return name;
}
public int getAge() {
return age;

public String getPhone() {
return phone;
}
}

  之后写XML的测试类,笔者把这个类命名为XMLTest,为了读写XML文件,需要导入如下JAVA包,"//"后为注释说明,笔者的环境是JDK 1.3.1_04,在JDK 1.4.0中测试也通过,XML解释器用Apache的Crimson,可以到Apache主页去上载。

import java.io.*; //Java基础包,包含各种IO操作
import java.util.*; //Java基础包,包含各种标准数据结构操作
import javax.xml.parsers.*; //XML解析器接口
import org.w3c.dom.*; //XML的DOM实现
import org.apache.crimson.tree.XmlDocument;//写XML文件要用到

为了保存多个学生信息,还得借助一个集合类(并不是单纯意义上的集合,JAVA中的集合是集合框架的概念,包含向量、列表、哈希表等),这里采用Vector向量类。定义在XMLTest测试类中,命名为student_Vector。然后定义两个方法readXMLFile和writeXMLFile,实现读写操作。代码如下:

private void readXMLFile(String inFile) throws Exception {
//为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce); //出异常时输出异常信息,然后退出,下同
System.exit(1);
}

Document doc = null;
try {
doc = db.parse(inFile);
} catch (DOMException dom) {
System.err.println(dom.getMessage());
System.exit(1);
} catch (IOException ioe) {
System.err.println(ioe);
System.exit(1);
}
//下面是解析XML的全过程,比较简单,先取根元素"学生花名册"
Element root = doc.getDocumentElement();
//取"学生"元素列表
NodeList students = root.getElementsByTagName("学生");
for (int i = 0; i < students.getLength(); i++) {
//依次取每个"学生"元素
Element student = (Element) students.item(i);
//创建一个学生的Bean实例
StudentBean studentBean = new StudentBean();
//取学生的性别属性
studentBean.setSex(student.getAttribute("性别"));
//取"姓名"元素,下面类同
NodeList names = student.getElementsByTagName("姓名");
if (names.getLength() == 1) {
Element e = (Element) names.item(0);
Text t = (Text) e.getFirstChild();
studentBean.setName(t.getNodeValue());
}

NodeList ages = student.getElementsByTagName("年龄");
if (ages.getLength() == 1) {
Element e = (Element) ages.item(0);
Text t = (Text) e.getFirstChild();
studentBean.setAge(Integer.parseInt(t.getNodeValue()));
}

NodeList phones = student.getElementsByTagName("电话");
if (phones.getLength() == 1) {
Element e = (Element) phones.item(0);
Text t = (Text) e.getFirstChild();
studentBean.setPhone(t.getNodeValue());
}

student_Vector.add(studentBean);
}
}

private void writeXMLFile(String outFile) throws Exception {
//为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce);
System.exit(1);
}

Document doc = null;
doc = db.newDocument();

//下面是建立XML文档内容的过程,先建立根元素"学生花名册"
Element root = doc.createElement("学生花名册");
//根元素添加上文档
doc.appendChild(root);

//取学生信息的Bean列表
for (int i = 0; i < student_Vector.size(); i++) {
//依次取每个学生的信息
StudentBean studentBean = (StudentBean) student_Vector.get(i);
//建立"学生"元素,添加到根元素
Element student = doc.createElement("学生");
student.setAttribute("性别", studentBean.getSex());
root.appendChild(student);
//建立"姓名"元素,添加到学生下面,下同
Element name = doc.createElement("姓名");
student.appendChild(name);
Text tName = doc.createTextNode(studentBean.getName());
name.appendChild(tName);

Element age = doc.createElement("年龄");
student.appendChild(age);
Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));
age.appendChild(tAge);

Element phone = doc.createElement("电话");
student.appendChild(phone);
Text tPhone = doc.createTextNode(studentBean.getPhone());
phone.appendChild(tPhone);
}
//把XML文档输出到指定的文件
FileOutputStream outStream = new FileOutputStream(outFile);
OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
((XmlDocument) doc).write(outWriter, "GB2312");
outWriter.close();
outStream.close(); 
}

最后加入测试主函数,如下:
public static void main(String[] args) throws Exception {
//建立测试实例 
XMLTest xmlTest = new XMLTest();
//初始化向量列表
xmlTest.student_Vector = new Vector();

System.out.println("开始读Input.xml文件");
xmlTest.readXMLFile("Input.xml");

System.out.println("读入完毕,开始写Output.xml文件");
xmlTest.writeXMLFile("Output.xml");
System.out.println("写入完成");
}

  好了,保存好StudentBean和XMLTest,把Input.xml保存到工作目录下。如果您输入很仔细,没敲错字母的话,可以看到"写入完成"了,去瞧瞧Output.xml文件和Input.xml文件是不是一样吧。

Java XML编程从入门到精通 htmltable {th, td {th {pre {简介:《Java XML编程指南》是一本专为Java开发者编写的实用指南,重点讲解了XMLJava环境中的应用,包括数据处理、通信等。书中深入介绍了XML的基础知识、在Java中的解析方法(如DOM、SAX和StAX),并涵盖了使用JAXB进行对象到XML的映射、JAXP的XML处理标准接口、XML Schema和DTD的定义、以及如何创建和消费SOAP服务。 阅读详情

相关推荐

java+xml联合编程简单例子

这是小弟的一次作业,觉得是一个很的学习资源,希望对java+xml联合编程感兴趣的朋友有所帮助。。。。

一文详细讲解JAVA开发中的XML

XML的全称是EXtensible Markup Language , 可扩展标记语言编写XML就是编写标签,与HTML非常类似,扩展.xml良好的人机可读性。

RockyBlogs 4595

java技术进行xml编程

IBM在线教程,主要介绍 Java 语言中处理 XML 文档最常用的编程接口。

java xml 编程_Java-XML

1 importjava.io.File;2 importjava.io.StringWriter;34 importjavax.xml.parsers.DocumentBuilder;5 importjavax.xml.parsers.DocumentBuilderFactory;6 importjavax.xml.parsers.ParserConfigurationException;7 i...

weixin_39535349的博客 175

day24XML、工厂模式、装饰模式

XML XML eXtensible Markup Language 可扩展的标记语言 它是一种数据的表示格式,可用来表示结构复杂的数据 常用于数据的存储和传输 XML的几个特点和使用场景 一是纯文本,默认使用UTF-8编码;二是可嵌套; 如果把XML内容存为文件,那么它就是一个XML文件。 XML的使用场景:XML内容经常被当成消息进行网络传输,或者作为配置文件用于存储系统的信息。 XML的语法规则 XML的创建 创建一个xml文件 语法规则: 第一行必须是文档声明 标签(元素)规则 标签由一对尖括号和

xiao_baibai1025的博客 519

java XML 编程指南

java xml 编程技术资料 ,系统介绍 java 如何开发xml

简析JAVAXML编程(java-xml初学者)

简析JAVAXML编程(java-xml初学者)作者名字忘了,當時時在網上找的一貼子,以后看到了再補上,對不住了。个人认为这篇文章通俗易懂,值得推荐。XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等)也都把支持XML开发作为宣传口号之一 。由于笔者所从事的电子政务开发较早的引入

冯立彬的博客 6968

简析JAVAXML编程(转载)

简析JAVAXML编程  作者:宁波吉联计算机技术有限公司研发部 徐荣胜 发文时间:2004.07.02  XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等)也都把支持XML开发作为宣传口号之一 。由于笔者所从事的电子政务开发较早的引入了XML,所以尝到了许多甜头,在许多项目中利用XM

创业、新知、分享 946
上一篇: Servlet的运行环境
下一篇: jive中的设计模式
arielxp
博客等级 码龄23年 557粉丝 476原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值