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;
聽聽聽聽}
聽聽聽聽
聽聽聽聽
}
寮曠敤錛歨ttp://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;
聽}
聽
聽/**
聽聽*聽鍒犻櫎鎸囧畾鑺傜偣鐨勬寚瀹氬睘鎬?br />聽聽*聽@param聽elmt
聽聽*聽@param聽name
聽聽*聽@return
聽聽*/
聽public聽Element聽removeAttribute(Element聽elmt,String聽name){
聽聽elmt.remove(elmt.attribute(name));
聽聽return聽elmt;
聽}
聽
聽/**
聽聽*聽杈撳嚭涓烘枃浠?br />聽聽*聽@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();
聽}

]]>