春天的光輝

          把春天的氣息和光芒灑滿大地,沐浴著身邊的每一個(gè)人... ...

           

          dom4j xml解析

          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( "http://foo/bar" );
          
                  Node node = document.selectSingleNode( "http://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( "http://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;
              }
          }
          

          posted on 2006-10-13 11:15 春輝 閱讀(1368) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: dom4j xml解析 2010-11-01 17:17 周洋

          謝謝啦。正有我需要的東西。  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          我的鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 凤城市| 台中县| 南靖县| 和硕县| 子洲县| 随州市| 宣化县| 嘉鱼县| 乐亭县| 舞阳县| 区。| 驻马店市| 耿马| 顺昌县| 湖南省| 云南省| 类乌齐县| 屏东县| 嘉峪关市| 麦盖提县| 永丰县| 屯留县| 甘肃省| 大英县| 广昌县| 清苑县| 迭部县| 大冶市| 乌鲁木齐县| 康平县| 北辰区| 宁津县| 斗六市| 长垣县| 称多县| 大连市| 浮梁县| 长葛市| 桂林市| 昂仁县| 日土县|