仓酷云

标题: JAVA编程:JAVA的XML编程 [打印本页]

作者: 莫相离    时间: 2015-1-18 11:37
标题: JAVA编程:JAVA的XML编程
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。xml|编程XML作为环球通用的布局化言语,愈来愈受人们喜爱,各类开辟平台(好比MicrosoftStudio系列、Oracle系列、InpriseBorland系列等)也都把撑持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文件的申明。
Input.xml
[code:1:af65f1d5b3]
<?xmlversion="1.0"encoding="GB2312"?>
<先生混名册>
<先生性别="男">
<姓名>李华</姓名>
<岁数>14</岁数>
<德律风>6287555</德律风>
</先生>
<先生性别="男">
<姓名>张三</姓名>
<岁数>16</岁数>
<德律风>8273425</德律风>
</先生>
</先生混名册>
[/code:1:af65f1d5b3]
筹办事情做完后,接着就入手下手写本色性的JAVA代码了。为保留从XML文件读进的信息,必要先建一个复杂的Bean来保留先生信息,定名为StudentBean,代码以下所示:
StudentBean.java
[code:1:af65f1d5b3]
publicclassStudentBean{
privateStringsex;//先生性别
privateStringname;//先生姓名
privateintage;//先生岁数
privateStringphone;//德律风号码

publicvoidsetSex(Strings){
sex=s;
}
publicvoidsetName(Strings){
name=s;
}
publicvoidsetAge(inta){
age=a;
}
publicvoidsetPhone(Strings){
phone=s;
}
publicStringgetSex(){
returnsex;
}
publicStringgetName(){
returnname;
}
publicintgetAge(){
returnage;
}
publicStringgetPhone(){
returnphone;
}
}
[/code:1:af65f1d5b3]
以后写XML的测试类,
TESTXml.java
[code:1:af65f1d5b3]

importjava.io.*;//Java基本包,包括各类IO操纵
importjava.util.*;//Java基本包,包括各类尺度数据布局操纵
importjavax.xml.parsers.*;//XML剖析器接口
importorg.w3c.dom.*;//XML的DOM完成
importorg.apache.crimson.tree.XmlDocument;//写XML文件要用到

publicclassXMLTest{
Vectorstudent_Vector;
XMLTest(){

}

//为了保留多个先生信息,还得借助一个汇合类(并非纯真意义上的汇合,JAVA中的汇合是汇合框架的观点,包括向量、列表、哈希表等),这里接纳Vector向量类。界说在XMLTest测试类中,定名为student_Vector。然后界说两个办法readXMLFile和writeXMLFile,完成读写操纵。代码以下:
privatevoidreadXMLFile(StringinFile)throwsException{
//为剖析XML作筹办,创立DocumentBuilderFactory实例,指定DocumentBuilder
DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();
DocumentBuilderdb=null;
try{
db=dbf.newDocumentBuilder();
}
catch(ParserConfigurationExceptionpce){
System.err.println(pce);//出非常时输入非常信息,然前进出,下同
System.exit(1);
}

Documentdoc=null;
try{
doc=db.parse(inFile);
}
catch(DOMExceptiondom){
System.err.println(dom.getMessage());
System.exit(1);
}
catch(IOExceptionioe){
System.err.println(ioe);
System.exit(1);
}
//上面是剖析XML的全历程,对照复杂,先取根元素"先生混名册"
Elementroot=doc.getDocumentElement();
//取"先生"元素列表
NodeListstudents=root.getElementsByTagName("先生");
for(inti=0;i<students.getLength();i++){
//顺次取每一个"先生"元素
Elementstudent=(Element)students.item(i);
//创立一个先生的Bean实例
StudentBeanstudentBean=newStudentBean();
//取先生的性别属性
studentBean.setSex(student.getAttribute("性别"));
//取"姓名"元素,上面类同
NodeListnames=student.getElementsByTagName("姓名");
if(names.getLength()==1){
Elemente=(Element)names.item(0);
Textt=(Text)e.getFirstChild();
studentBean.setName(t.getNodeValue());
}

NodeListages=student.getElementsByTagName("岁数");
if(ages.getLength()==1){
Elemente=(Element)ages.item(0);
Textt=(Text)e.getFirstChild();
studentBean.setAge(Integer.parseInt(t.getNodeValue()));
}

NodeListphones=student.getElementsByTagName("德律风");
if(phones.getLength()==1){
Elemente=(Element)phones.item(0);
Textt=(Text)e.getFirstChild();
studentBean.setPhone(t.getNodeValue());
}

student_Vector.add(studentBean);
}
}

privatevoidwriteXMLFile(StringoutFile)throwsException{
//为剖析XML作筹办,创立DocumentBuilderFactory实例,指定DocumentBuilder
DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();
DocumentBuilderdb=null;
try{
db=dbf.newDocumentBuilder();
}
catch(ParserConfigurationExceptionpce){
System.err.println(pce);
System.exit(1);
}

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

//上面是创建XML文档内容的历程,先创建根元素"先生混名册"
Elementroot=doc.createElement("先生混名册");
//根元素增加上文档
doc.appendChild(root);

//取先生信息的Bean列表
for(inti=0;i<student_Vector.size();i++){
//顺次取每一个先生的信息
StudentBeanstudentBean=(StudentBean)student_Vector.get(i);
//创建"先生"元素,增加到根元素
Elementstudent=doc.createElement("先生");
student.setAttribute("性别",studentBean.getSex());
root.appendChild(student);
//创建"姓名"元素,增加到先生上面,下同
Elementname=doc.createElement("姓名");
student.appendChild(name);
TexttName=doc.createTextNode(studentBean.getName());
name.appendChild(tName);

Elementage=doc.createElement("岁数");
student.appendChild(age);
TexttAge=doc.createTextNode(String.valueOf(studentBean.
getAge()));
age.appendChild(tAge);

Elementphone=doc.createElement("德律风");
student.appendChild(phone);
TexttPhone=doc.createTextNode(studentBean.getPhone());
phone.appendChild(tPhone);
}
//把XML文档输入到指定的文件
FileOutputStreamoutStream=newFileOutputStream(outFile);
OutputStreamWriteroutWriter=newOutputStreamWriter(outStream);
((XmlDocument)doc).write(outWriter,"GB2312");
outWriter.close();
outStream.close();
}

//最初到场测试主函数,以下:
publicstaticvoidmain(String[]args)throwsException{
//创建测试实例
XMLTestxmlTest=newXMLTest();
//初始化向量列表
xmlTest.student_Vector=newVector();

System.out.println("入手下手读Input.xml文件");
xmlTest.readXMLFile("Input.xml");

System.out.println("读进终了,入手下手写Output.xml文件");
xmlTest.writeXMLFile("Output.xml");
System.out.println("写进完成");
System.in.read();
}
}[/code:1:af65f1d5b3]
了,保留好StudentBean和XMLTest,把Input.xml保留到事情目次下。假如您输出很细心,没敲错字母的话,能够看到"写进完成"了,往瞧瞧Output.xml文件和Input.xml文件是否是一样吧。假如您在调试过程当中发明有甚么成绩,接待经由过程E-Mail:nbDeveloper@hotmail.com与笔者获得接洽。[/code]



你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。
作者: 愤怒的大鸟    时间: 2015-1-19 21:27
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者: 海妖    时间: 2015-1-24 17:41
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 老尸    时间: 2015-1-25 11:32
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: 山那边是海    时间: 2015-1-25 16:03
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 小女巫    时间: 2015-1-25 16:20
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 深爱那片海    时间: 2015-1-26 10:45
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 灵魂腐蚀    时间: 2015-2-4 13:46
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 活着的死人    时间: 2015-2-5 23:34
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 爱飞    时间: 2015-2-14 05:20
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者: 不帅    时间: 2015-2-21 06:14
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: 冷月葬花魂    时间: 2015-2-24 17:53
是一种语言,用以产生「小应用程序(Applet(s))
作者: 因胸联盟    时间: 2015-2-26 18:15
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 谁可相欹    时间: 2015-3-8 16:27
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 兰色精灵    时间: 2015-3-8 18:49
是一种语言,用以产生「小应用程序(Applet(s))
作者: 仓酷云    时间: 2015-3-11 06:03
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者: 柔情似水    时间: 2015-3-11 06:24
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 只想知道    时间: 2015-3-16 17:35
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 分手快乐    时间: 2015-3-22 23:28
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 小妖女    时间: 2015-3-30 13:46
是一种使用者不需花费很多时间学习的语言
作者: 若天明    时间: 2015-4-3 03:02
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2