|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。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打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢? |
|