仓酷云
标题:
JAVA网页编程之JDOM 先容及利用指南
[打印本页]
作者:
逍遥一派
时间:
2015-1-18 11:48
标题:
JAVA网页编程之JDOM 先容及利用指南
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。dom
转自:http://blog.csdn.net/hk2000c/archive/2003/09/26/15239.aspx
JDOM先容及利用指南
1、JDOM简介JDOM是一个开源项目,它基于树型布局,使用纯JAVA的手艺对XML文档完成剖析、天生、序列化和多种操纵。JDOM间接为JAVA编程服务。它使用更加强无力的JAVA言语的诸多特征(办法重载、汇合观点和映照),把SAX和DOM的功效无效地分离起来。在利用计划上尽量地埋没本来利用XML过程当中的庞大性。使用JDOM处置XML文档将是一件轻松、复杂的事。JDOM在2000年的春季被BrettMcLaughlin和JasonHunter开辟出来,以填补DOM及SAX在实践使用傍边的不敷的地方。这些不敷的地方次要在于SAX没有文档修正、随机会见和输入的功效,而关于DOM来讲,JAVA程序员在利用时来用起来总以为不太便利。DOM的弱点次要是来自于因为Dom是一个接口界说言语(IDL),它的义务是在分歧言语完成中的一个最低的通用尺度,并非为JAVA出格计划的。JDOM的最新版本为JDOMBeta9。比来JDOM被收录到JSR-102内,这标记着JDOM成了JAVA平台构成的一部分。
2、JDOM包概览JDOM是由以下几个包构成的org.JDOMorg.JDOM.inputorg.JDOM.outputorg.JDOM.adaptersorg.JDOM.transform
3、JDOM类申明
org.JDOM这个包里的类是你剖析xml文件后所要用到的一切数据范例。AttributeCDATAComentDocTypeDocumentElementEntityRefNamespaceProscessingInstructionText
org.JDOM.transform在触及xslt格局转换时应利用上面的2个类JDOMSourceJDOMResult
org.JDOM.input输出类,一样平常用于文档的创立事情SAXBuilderDOMBuilderResultSetBuilder
org.JDOM.output输入类,用于文档转换输入XMLOutputterSAXOutputterDomOutputterJTreeOutputter
利用前注重事项:1.JDOM关于JAXP和TRax的撑持JDOM撑持JAXP1.1:你能够在程序中利用任何的parser工具类,默许情形下是JAXP的parser。制订出格的parser可用以下情势SAXBuilderparser=newSAXBuilder("org.apache.crimson.parser.XMLReaderImpl");Documentdoc=parser.build("http://www.cafeconleche.org/");//workwiththedocument...JDOM也撑持TRaX:XSLT可经由过程JDOMSource和JDOMResult类来转换(拜见今后章节)2.注重在JDOM里文档(Document)类由org.JDOM.Document来暗示。这要与org.w3c.dom中的Document区分开,这2种格局怎样转换在前面会申明。以下如无特指均指JDOM里的Document。
4、JDOM次要利用办法1.Ducument类(1)Document的操纵办法:Elementroot=newElement("GREETING");Documentdoc=newDocument(root);root.setText("HelloJDOM!");大概复杂的利用Documentdoc=newDocument(newElement("GREETING").setText("HelloJDOM!t"));
这点和DOM分歧。Dom则必要更加庞大的代码,以下:DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=factory.newDocumentBuilder();Documentdoc=builder.newDocument();Elementroot=doc.createElement("root");Texttext=doc.createText("Thisistheroot");root.appendChild(text);doc.appendChild(root);
注重事项:JDOM不同意统一个节点同时被2个或多个文档相干联,要在第2个文档中利用本来老文档中的节点的话。起首必要利用detach()把这个节点分隔来。(2)从文件、流、体系ID、URL失掉Document对象:DOMBuilderbuilder=newDOMBuilder();Documentdoc=builder.build(newFile("jdom_test.xml"));
SAXBuilderbuilder=newSAXBuilder();Documentdoc=builder.build(url);在新版本中DOMBuilder已Deprecated失落DOMBuilder.builder(url),用SAX效力会对照快。
这里举一个小例子,为了复杂起见,利用String对象间接作为xml数据源:
publicjdomTest(){StringtextXml=null;textXml="<note>";textXml=textXml+"<to>aaa</to><from>bbb</from><heading>ccc</heading><body>ddd</body>";textXml=textXml+"</note>";SAXBuilderbuilder=newSAXBuilder();Documentdoc=null;Readerin=newStringReader(textXml);try{doc=builder.build(in);Elementroot=doc.getRootElement();Listls=root.getChildren();//注重此处掏出的是root节点上面的一层的Element汇合for(Iteratoriter=ls.iterator();iter.hasNext();){Elementel=(Element)iter.next();if(el.getName().equals("to")){System.out.println(el.getText());}}}catch(IOExceptionex){ex.printStackTrace();}catch(JDOMExceptionex){ex.printStackTrace();}}
很复杂把。
(3)DOM的document和JDOM的Document之间的互相转换利用办法,复杂!DOMBuilderbuilder=newDOMBuilder();org.jdom.DocumentjdomDocument=builder.build(domDocument);//workwiththeJDOMdocument…
DOMOutputterconverter=newDOMOutputter();org.w3c.dom.DocumentdomDocument=converter.output(jdomDocument);//workwiththeDOMdocument…
2.XML文档输入XMLOutPutter类:JDOM的输入十分天真,撑持良多种io格局和作风的输入Documentdoc=newDocument(...);XMLOutputteroutp=newXMLOutputter();//Rawoutputoutp.output(doc,fileOutputStream);//Compressedoutputoutp.setTextTrim(true);outp.output(doc,socket.getOutputStream());//Prettyoutputoutp.setIndent("");outp.setNewlines(true);outp.output(doc,System.out);......具体请参阅最新的JDOMAPI手册
3.Element类:(1)扫瞄Element树//取得根元素elementElementroot=doc.getRootElement();//取得一切子元素的一个listListallChildren=root.getChildren();//取得指命名称子元素的listListnamedChildren=root.getChildren("name");//取得指命名称的第一个子元素Elementchild=root.getChild("name");(这里的List是java.util.List)
JDOM给了我们良多很天真的利用办法来办理子元素ListallChildren=root.getChildren();//删除第四个子元素allChildren.remove(3);//删除叫“jack”的子元素allChildren.removeAll(root.getChildren("jack"));
root.removeChildren("jack");//便利写法//到场allChildren.add(newElement("jane"));
root.addContent(newElement("jane"));//便利写法allChildren.add(0,newElement("first"));
(2)挪动Elements:在JDOM里很复杂Elementmovable=newElement("movable");parent1.addContent(movable);//placeparent1.removeContent(movable);//removeparent2.addContent(movable);//add
在Dom里Elementmovable=doc1.createElement("movable");parent1.appendChild(movable);//placeparent1.removeChild(movable);//removeparent2.appendChild(movable);//堕落!
增补:纠错性JDOM的Element机关函数(和它的其他函数)会反省element是不是正当。而它的add/remove办法会反省树布局,反省内容以下:1.在任何树中是不是有回环节点2.是不是只要一个根节点3.是不是有分歧的定名空间(Namespaces)
(3)Element的text内容读取<description>Acooldemo</description>
//Thetextisdirectlyavailable//Returns"
Acooldemo
"Stringdesc=element.getText();
//Theresaconvenientshortcut//Returns"Acooldemo"Stringdesc=element.getTextTrim();
(4)Elment内容修正element.setText("Anewdescription");3.可准确注释特别字符element.setText("<xml>content");4.CDATA的数据写进、读出element.addContent(newCDATA("<xml>content"));StringnoDifference=element.getText();
夹杂内容element大概包括良多种内容,好比说
<table><!--Somecomment-->Sometext<tr>Somechildelement</tr></table>
取table的子元素trStringtext=table.getTextTrim();Elementtr=table.getChild("tr");
也可以使用别的一个对照复杂的办法ListmixedCo=table.getContent();Iteratoritr=mixedCo.iterator();while(itr.hasNext()){Objecto=i.next();if(oinstanceofComment){...}//这里能够写成Comment,Element,Text,CDATA,ProcessingInstruction,大概是EntityRef的范例}//如今移除Comment,注重这里游标应为1。这是因为回车键也被剖析成Text类的原因,以是Comment项应为1。mixedCo.remove(1);
4.Attribute类<tablewidth="100%"border="0"></table>//取得attributeStringwidth=table.getAttributeValue("width");intborder=table.getAttribute("width").getIntValue();//设置attributetable.setAttribute("vspace","0");//删除一个或全体attributetable.removeAttribute("vspace");table.getAttributes().clear();
5.处置指令(ProcessingInstructions)操纵一个Pls的例子<?br?><?cocoon-processtype="xslt"?>||||方针数据
处置方针称号(Target)Stringtarget=pi.getTarget();取得一切数据(data),在方针(target)今后的一切数据城市被前往。Stringdata=pi.getData();取得指定属性的数据Stringtype=pi.getValue("type");取得一切属性的称号Listls=pi.getNames();
6.定名空间操纵<xhtml:htmlxmlns:xhtml="http://www.w3.org/1999/xhtml"><xhtml:title>HomePage</xhtml:title></xhtml:html>
Namespacexhtml=Namespace.getNamespace("xhtml","http://www.w3.org/1999/xhtml");Listkids=html.getChildren("title",xhtml);Elementkid=html.getChild("title",xhtml);kid.addContent(newElement("table",xhtml));
7.XSLT格局转换利用以下函数可对XSLT转换最初假如你必要利用w3c的Document则必要转换一下。publicstaticDocumenttransform(Stringstylesheet,Documentin)throwsJDOMException{try{Transformertransformer=TransformerFactory.newInstance().newTransformer(newStreamSource(stylesheet));JDOMResultout=newJDOMResult();transformer.transform(newJDOMSource(in),out);returnout.getDeocument();}catch(TransformerExceptione){thrownewJDOMException("XSLTTrandformationfailed",e);}}
参考书目:
1.JDOM官方网站:http://www.jdom.org
2.<<ProcessingXMLwithJava>>ElliotteRustyHarold2002
3.JDOMAPIDocumentation
4.<<JDOMMakesXMLEasy>>JasonHunterCo-CreatorJDOMProject
5.WSDPTutorial
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢?
作者:
蒙在股里
时间:
2015-1-18 15:43
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
灵魂腐蚀
时间:
2015-1-22 07:50
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
逍遥一派
时间:
2015-1-30 23:49
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者:
活着的死人
时间:
2015-1-31 20:10
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
简单生活
时间:
2015-1-31 21:27
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
飘灵儿
时间:
2015-2-3 05:40
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者:
不帅
时间:
2015-2-5 22:34
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者:
变相怪杰
时间:
2015-2-8 19:15
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者:
谁可相欹
时间:
2015-2-11 09:13
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
作者:
小女巫
时间:
2015-2-14 15:26
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
飘飘悠悠
时间:
2015-2-15 14:22
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者:
深爱那片海
时间:
2015-2-22 21:46
是一种语言,用以产生「小应用程序(Applet(s))
作者:
再现理想
时间:
2015-3-7 03:00
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者:
仓酷云
时间:
2015-3-8 05:55
是一种为 Internet发展的计算机语言
作者:
再见西城
时间:
2015-3-8 18:01
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者:
乐观
时间:
2015-3-16 08:51
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
爱飞
时间:
2015-3-17 12:48
是一种将安全性(Security)列为第一优先考虑的语言
作者:
莫相离
时间:
2015-3-18 11:17
是一种为 Internet发展的计算机语言
作者:
小妖女
时间:
2015-3-25 18:24
是一种语言,用以产生「小应用程序(Applet(s))
作者:
若相依
时间:
2015-4-1 17:46
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2