vista精神之-dom4j读写xml文件

vista精神之-dom4j读写xml文件
虽然考虑到读取文件会影响性能,最终没有采用这种方式,而是取数据库,但总结出来以后说不定用的着,呵呵.

1,下载dom4j
2,写xml的代码
public   class  AddPictureAction  extends  BaseAction  {
    
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) 
throws DocumentException {

        
try {
            FileWriter out 
= new FileWriter(request.getSession().getServletContext().getRealPath(Constants.DOG_SON_HOT_PICTURE));
              //这里我用的相对路径,代码里是"WEB-INF//config/a.xml"
            String picPath1 
= request.getParameter("picPath1");
            String picPath2 
= request.getParameter("picPath2");
            String picPath3 
= request.getParameter("picPath3");
            String picPath4 
= request.getParameter("picPath4");
            String picPath5 
= request.getParameter("picPath5");
            String url1 
= request.getParameter("url1");
            String url2 
= request.getParameter("url2");
            String url3 
= request.getParameter("url3");
            String url4 
= request.getParameter("url4");
            String url5 
= request.getParameter("url5");
            Document document 
= DocumentHelper.createDocument();
            Element root 
= document.addElement("root");
            root.addElement(
"picPath1").addText(picPath1);
            root.addElement(
"picPath2").addText(picPath2);
            root.addElement(
"picPath3").addText(picPath3);
            root.addElement(
"picPath4").addText(picPath4);
            root.addElement(
"picPath5").addText(picPath5);
            root.addElement(
"url1").addText(url1);
            root.addElement(
"url2").addText(url2);
            root.addElement(
"url3").addText(url3);
            root.addElement(
"url4").addText(url4);
            root.addElement(
"url5").addText(url5);
            document.write(out);
            out.close();
        }
 catch (IOException e) {
            e.printStackTrace();
        }

        
return mapping.findForward(Constants.SUCCESS);
    }


}

解析xml的代码
        Resource resource  =   new
                    FileSystemResource(request.getSession().getServletContext().getRealPath(Constants.DOG_SON_HOT_PICTURE));
        SAXReader reader 
=   new  SAXReader();
        Document document 
=  reader.read(resource.getInputStream());
        System.out.println(document.asXML());

dom4j官方入门的文章,我把它拷贝下来了,呵呵:



Parsing XML
One of the first things you
' ll probably want to do is to parse an XML document of some kind. This is easy to do in dom4j. The following code demonstrates how to this. 

import  java.net.URL;

import  org.dom4j.Document;
import  org.dom4j.DocumentException;
import  org.dom4j.io.SAXReader;

public   class  Foo  {

    
public Document parse(URL url) throws DocumentException {
        SAXReader reader 
= new SAXReader();
        Document document 
= reader.read(url);
        
return document;
    }

}

Using Iterators
A document can be navigated using a variety of methods that 
return  standard Java Iterators. For example 

    
public   void  bar(Document document)  throws  DocumentException  {

        Element root 
= document.getRootElement();

        
// iterate through child elements of root
        for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
            Element element 
= (Element) i.next();
            
// do something
        }


        
// iterate through child elements of root with element name "foo"
        for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
            Element foo 
= (Element) i.next();
            
// do something
        }


        
// iterate through attributes of root 
        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
            Attribute attribute 
= (Attribute) i.next();
            
// do something
        }

     }

Powerful Navigation with XPath
In dom4j XPath expressions can be evaluated on the Document or on any Node in the tree (such as Attribute, Element or ProcessingInstruction). This allows complex navigation throughout the document with a single line of code. For example. 

    
public   void  bar(Document document)  {
        List list 
= document.selectNodes( "//foo/bar" );

        Node node 
= document.selectSingleNode( "//foo/bar/author" );

        String name 
= node.valueOf( "@name" );
    }

For example 
if  you wish to find all the hypertext links in an XHTML document the following code would  do  the trick. 

    
public   void  findLinks(Document document)  throws  DocumentException  {

        List list 
= document.selectNodes( "//a/@href" );

        
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
            Attribute attribute 
= (Attribute) iter.next();
            String url 
= attribute.getValue();
        }

    }

If you need any help learning the XPath language we highly recommend the Zvon tutorial which allows you to learn by example. 

Fast Looping
If you ever have to walk a large XML document tree then 
for  performance we recommend you use the fast looping method which avoids the cost of creating an Iterator object  for  each loop. For example 

    
public   void  treeWalk(Document document)  {
        treeWalk( document.getRootElement() );
    }


    
public   void  treeWalk(Element element)  {
        
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
            Node node 
= element.node(i);
            
if ( node instanceof Element ) {
                treeWalk( (Element) node );
            }

            
else {
                
// do something.
            }

        }

    }

Creating a 
new  XML document
Often in dom4j you will need to create a 
new  document from scratch. Here ' s an example of doing that. 

import  org.dom4j.Document;
import  org.dom4j.DocumentHelper;
import  org.dom4j.Element;

public   class  Foo  {

    
public Document createDocument() {
        Document document 
= DocumentHelper.createDocument();
        Element root 
= document.addElement( "root" );

        Element author1 
= root.addElement( "author" )
            .addAttribute( 
"name""James" )
            .addAttribute( 
"location""UK" )
            .addText( 
"James Strachan" );
        
        Element author2 
= root.addElement( "author" )
            .addAttribute( 
"name""Bob" )
            .addAttribute( 
"location""US" )
            .addText( 
"Bob McWhirter" );

        
return document;
    }

}

Writing a document to a file
A quick and easy way to write a Document (or any Node) to a Writer is via the write() method. 

  FileWriter out 
=   new  FileWriter(  " foo.xml "  );
  document.write( out );
If you want to be able to change the format of the output, such as pretty printing or a compact format, or you want to be able to work with Writer objects or OutputStream objects as the destination, then you can use the XMLWriter 
class

import  org.dom4j.Document;
import  org.dom4j.io.OutputFormat;
import  org.dom4j.io.XMLWriter;

public   class  Foo  {

    
public void write(Document document) throws IOException {

        
// lets write to a file
        XMLWriter writer = new XMLWriter(
            
new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();


        
// Pretty print the document to System.out
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer 
= new XMLWriter( System.out, format );
        writer.write( document );

        
// Compact format to System.out
        format = OutputFormat.createCompactFormat();
        writer 
= new XMLWriter( System.out, format );
        writer.write( document );
    }

}

Converting to and from Strings
If you have a reference to a Document or any other Node such as an Attribute or Element, you can turn it into the 
default  XML text via the asXML() method. 

        Document document 
=  ;
        String text 
=  document.asXML();
If you have some XML as a String you can parse it back into a Document again using the helper method DocumentHelper.parseText() 

        String text 
=   " <person> <name>James</name> </person> " ;
        Document document 
=  DocumentHelper.parseText(text);
Styling a Document with XSLT
Applying XSLT on a Document is quite straightforward using the JAXP API from Sun. This allows you to work against any XSLT engine such as Xalan or SAXON. Here is an example of using JAXP to create a transformer and then applying it to a Document. 

import  javax.xml.transform.Transformer;
import  javax.xml.transform.TransformerFactory;

import  org.dom4j.Document;
import  org.dom4j.io.DocumentResult;
import  org.dom4j.io.DocumentSource;

public   class  Foo  {

    
public Document styleDocument(
        Document document, 
        String stylesheet
    ) 
throws Exception {

        
// load the transformer using JAXP
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer 
= factory.newTransformer( 
            
new StreamSource( stylesheet ) 
        );

        
// now lets style the given document
        DocumentSource source = new DocumentSource( document );
        DocumentResult result 
= new DocumentResult();
        transformer.transform( source, result );

        
// return the transformed document
        Document transformedDoc = result.getDocument();
        
return transformedDoc;
    }

你可能感兴趣的:(vista精神之-dom4j读写xml文件)