posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

dom4j 学习

Posted on 2007-11-06 15:24 G_G 阅读(2090) 评论(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( 
34 ).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();
 }


评论

# re: dom4j 学习  回复  更多评论   

2007-11-06 17:44 by li
基本的IO操作都有了,还不错

# re: dom4j 学习  回复  更多评论   

2007-11-06 17:59 by G_G
谢谢

# re: dom4j 学习  回复  更多评论   

2007-11-07 10:29 by dom
各位好!?
有没有关于dom4j的详细一点资料? 谢谢.

# re: dom4j 学习  回复  更多评论   

2007-11-08 23:17 by 姜利阳
与Jdom的操作方式很相似

Document
Element
Attribute

SAX方式的读操作
Dom方式的写操作

# re: dom4j 学习  回复  更多评论   

2007-11-09 17:13 by G_G
@姜利阳
都是 jdk中xml的包装类 dom4j 和 jdom (我jdom没太看呵呵)

# re: dom4j 学习  回复  更多评论   

2007-11-09 21:24 by 姜利阳
其实只要用熟了一个, 然后看其他的,原理和思路都很相似

只有注册用户登录后才能发表评论。


网站导航: