Posted on 2007-11-06 15:24
G_G 閱讀(2095)
評論(3) 編輯 收藏 所屬分類:
xml Related
直接看代碼..
dom4j 的一般使用都在里面了
/lib/dom4j-1.6.1.jar
/lib/jaxen-1.1-beta-6.jar
package?useDom4j.test.supper;
import?java.io.File;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.OutputStream;
import?java.net.URL;
import?java.util.Iterator;
import?java.util.List;
import?java.util.regex.Matcher;
import?java.util.regex.Pattern;
import?javax.xml.parsers.DocumentBuilder;
import?javax.xml.parsers.DocumentBuilderFactory;
import?junit.framework.TestCase;
import?org.dom4j.Document;
import?org.dom4j.DocumentFactory;
import?org.dom4j.DocumentHelper;
import?org.dom4j.Element;
import?org.dom4j.Node;
import?org.dom4j.QName;
import?org.dom4j.Visitor;
import?org.dom4j.VisitorSupport;
import?org.dom4j.XPath;
import?org.dom4j.io.DOMReader;
import?org.dom4j.io.HTMLWriter;
import?org.dom4j.io.OutputFormat;
import?org.dom4j.io.SAXReader;
import?org.dom4j.io.XMLWriter;
public?class?useDom4jTest?extends?TestCase?{
????//use?all
????private?String?path?;
????private?ClassLoader?clo;
????//?file?path?->?bin?
????private?String?classPath?;
????//use?save?
????static?private?Document?doc;
????private?String?filese;
????protected?void?setUp()?throws?Exception?{
????????super.setUp();
????????path?=?"useDom4j/test/config/test.xml";
????????clo?=?this.getClass().getClassLoader();
????????classPath?=?System.getProperty("java.class.path").split(";")[0]???;
????????filese?=?System.getProperty("file.separator");
????}
????protected?void?tearDown()?throws?Exception?{
????????super.tearDown();
????}
????
????public?void?testRead()throws?Exception{
????????SAXReader?sax?=?new?SAXReader();
????????//File?read
????????Document?docF?=??sax.read(
????????????????new?File(clo.getResource(path).getFile())
????????????????????);
????????assertNotNull("is?File?saxReader?err",docF);
????????
????????//InPutStream?read?
????????Document?docI?=?sax.read(?clo.getResourceAsStream(path)?);
????????assertNotNull("is?InPutStream?saxReader?err",docI);
????????
????????//URL?read?
????????Document?docU?=?sax.read(?clo.getResource(path)?);
????????assertNotNull("is?Url?saxReader?err",docU);
????????
????}
????
????/**?converts?a?W3C?DOM?document?into?a?dom4j?document?*/
????public?void?testConversion()?throws?Exception{
??????????DocumentBuilderFactory?domfac=DocumentBuilderFactory.newInstance();
??????????DocumentBuilder?dombuilder=domfac.newDocumentBuilder();
??????????InputStream?input?=??clo.getResourceAsStream(path)?;
??????????org.w3c.dom.Document?doc3c?=?dombuilder.parse(?input?);
??????????DOMReader?xmlReader?=?new?DOMReader();
??????????assertEquals(?"?Conversion?:?W3C?DOM->?dom4j?DOM?err",
??????????????????xmlReader.read(doc3c)?instanceof?Document,true?);
??????}
??????
????public?void?testCreate()throws?Exception{
??????????DocumentFactory?factory?=?DocumentFactory.getInstance();
??????????doc?=?factory.createDocument();
????????//root?Create
??????????Element?root?=?doc.addElement("testElement");
??????????assertNotNull("is?root?Create?err",root);
??????????
???????????Element?author2?=?root.addElement(?"author"?)
??????????????.addAttribute(?"name",?"Toby"?)
??????????????.addAttribute(?"location",?"Germany"?)
??????????????.addText(?"Tobias?Rademacher"?);
????????????Element?author1?=?root.addElement(?"author"?)
??????????????.addAttribute(?"name",?"James"?)
??????????????.addAttribute(?"location",?"UK"?)
??????????????.addText(?"James?Strachan"?);
????????????
????????????//Test?Create?
????????????//use?XPath?->jaxen-xxx.jar??
????????????assertEquals("create?Element?author2?err",
????????????????????doc.selectSingleNode("/testElement/author[@name='Toby']").getText()
????????????????????,"Tobias?Rademacher");
????????????assertEquals("create?Element?author1?err",
????????????????????doc.selectSingleNode("/testElement/author[@location='UK']/@name").getText()
????????????????????,"James");
????}
?????public?void?testPrintingHTML()throws?Exception{
???????????String?testSaveXml?=?"useDom4j/test/config/testHtml.html";
???????????
???????????testSaveXml?=?classPath+filese+testSaveXml;
??????????
???????????File?file?=?getFile(testSaveXml);
???????????//Save?file.html?
???????????HTMLWriter?writer?=?new?HTMLWriter(new?FileOutputStream(?file?));
???????????writer.write(new?SAXReader().read(?clo.getResource(path)?));
???????????writer.flush();
?????}
????
????public?void?testIterator(){
????????Element?root?=?this.doc.getRootElement();
????????
????????//Iterator
????????Iterator?elementIterator?=?root.elementIterator();
????????while(elementIterator.hasNext()){
??????????Element?element?=?(Element)elementIterator.next();
??????????assertNotNull("not?attr?name",?element.selectSingleNode("./@name")?);
??????????assertNotNull("not?attr?location",?element.selectSingleNode("./@location")?);
??????????assertNotNull("not?Text?",?element.selectSingleNode(".").getText()?);
????????}
????????
????????//for?->?./XX
????????for?(?int?i?=?0,?size?=?root.nodeCount();?i?<?size;?i++?)?{
????????????Node?node?=?root.node(i);
????????????if?(?node?instanceof?Element?)?{
??????????????Element?element?=?(Element)node;
??????????????assertNotNull("not?attr?name",?element.selectSingleNode("./@name")?);
????????????????assertNotNull("not?attr?location",?element.selectSingleNode("./@location")?);
????????????????assertNotNull("not?Text?",?element.selectSingleNode(".").getText()?);
????????????}
????????}
????????
????????//List?
????????List?elements?=?root.elements();
????????int?size?=?elements.size()?;
????????if?(?size?>?4?)?{
??????????elements.subList(?3,?4?).clear();
??????????assertEquals("List?is?not?clear",size-elements.size()==1,true);
????????}
????}
????
????/**?use?test.xml?test
?????????xpath?->?/project/organization/
?????????<organization>
?????????????<name>MetaStuff?Ltd.</name>
?????????????<url>http://sourceforge.net/projects/dom4j</url>
?????????????<logo>http://sourceforge.net/sflogo.php?group_id=16035</logo>
??????????</organization>?
??????????
??????????xpath?->?/project/dependencies/dependency[groupId='msv']
????????????<dependency>
??????????????<groupId>msv</groupId>
??????????????<artifactId>xsdlib</artifactId>
??????????????<version>20030807</version>
??????????????<url>https://msv.dev.java.net/</url>
????????????</dependency>
????*/
????public?void?testXpath()throws?Exception{
????????XPath?xpathSelector?=?DocumentHelper.createXPath("/project/organization/*");
????????Document?docT?=?new?SAXReader().read(?clo.getResourceAsStream(path)?);
????????List?results?=?xpathSelector.selectNodes(docT);
????????for?(?Iterator?iter?=?results.iterator();?iter.hasNext();?)?{
??????????Element?element?=?(Element)?iter.next();
??????????if(element.getName().equals("name")){
??????????????assertEquals("name?err",?element.getText().equals("MetaStuff?Ltd."),true);
??????????}
??????????if(element.getName().equals("url")){
??????????????assertEquals("url?err",?element.getText().equals("http://sourceforge.net/projects/dom4j"),true);
??????????}
??????????if(element.getName().equals("logo")){
??????????????assertEquals("logo?err",?element.getText().equals("http://sourceforge.net/sflogo.php?group_id=16035"),true);
??????????}
????????}
????????
????????//?select?
????????String?url?=?docT.valueOf(?"/project/dependencies/dependency[groupId='msv']/url"?);
????????assertEquals("Url?err",?url.equals("https://msv.dev.java.net/"),true);
????????Number?count?=?docT.numberValueOf(?"/project/dependencies/dependency[groupId='msv']/version"?);
????????assertEquals("Url?err",?count.intValue()==20030807,true);
????????
????}
????
????public?void?testVisitor(){
????????Visitor?visitor?=?new?VisitorSupport()?{
????????????public?void?visit(Element?element)?{
??????????????System.out.println(
????????????????"Entity?name:?"?+?element.getName()??+?"?text?:"?+?element.getText()
??????????????);
????????????}
??????????};
??????????doc.accept(?visitor?);
????}
????//??element.clone?;??element.createCopy?;???
????public?void?testInsertElementAt()?throws?Exception{
????????Element?root?=?this.doc.getRootElement();
????????Element?oldElement?=?(Element)doc.selectSingleNode("/testElement/author[@name='Toby']");
????????Element?newElement?=?(Element)?oldElement.clone();
????????List?list?=?root.content();
????????list.add(?root.indexOf(oldElement)+1,newElement?);
?????}
????
????
????
????
?????public?void?testSave()throws?Exception{
???????????String?testSaveXml?=?"useDom4j/test/config/testSave.xml";
???????????
???????????testSaveXml?=?classPath+filese+testSaveXml;
??????????
???????????File?file?=?getFile(testSaveXml);
???????????//Save?file.xml?
???????????XMLWriter?writer?=?new?XMLWriter(new?FileOutputStream(?file?));
???????????writer.write(doc);
???????????writer.flush();
?????}
?????
?????
????private?File?getFile(String?testSaveXml)?throws?IOException?{
????????File?file?=?null?;
???????????URL?url?=?clo.getResource(testSaveXml);
???????????if(url==null){
???????????????file?=?new?File(testSaveXml);
???????????????file.createNewFile();
???????????}else{
???????????????file?=?new?File(??url.getFile()?);
???????????}
????????return?file;
????}
????
????
}
引用:http://freezingxu.blog.com.cn/archives/2006/1892647.shtml
/**
??*?對指定的節點增加屬性和文本
??*?@param?elmt
??*?@param?name
??*?@param?value
??*?@param?text
??*?@return
??*/
?public?Element?addAttribute(Element?elmt,String?name,String?value){
??elmt.addAttribute(name,value);
??return?elmt;
?}
?
?/**
??*?修改指定節點的屬性和文本
??*?@param?elmt
??*?@param?name
??*?@param?value
??*?@param?text
??*?@return
??*/
?public?Element?setAttribute(Element?elmt,String?name,String?value){
??Attribute?attribute?=?elmt.attribute(name);
??//attribute.setName(name);
??attribute.setValue(value);
??List?list?=?new?ArrayList();
??list.add(attribute);
??elmt.setAttributes(list);
??return?elmt;
?}
?
?/**
??*?刪除指定節點的指定屬性
??*?@param?elmt
??*?@param?name
??*?@return
??*/
?public?Element?removeAttribute(Element?elmt,String?name){
??elmt.remove(elmt.attribute(name));
??return?elmt;
?}
?
?/**
??*?輸出為文件
??*?@param?doc
??*?@throws?IOException
??*/
?public?void?writeFile(Document?doc)?throws?IOException{
??FileWriter?out?=?new?FileWriter(?"d:/newQuery.xml"?);
??doc.write(out);
??out.flush();
??out.close();
?}