Jul 1

dom4j使用总结 不指定

ljh , 17:53 , JAVA SSH学习 , 评论(0) , 引用(0) , 阅读(471) , Via 本站原创 | |
  1. 或许你想要做的第一件事情就是解析一个某种类型的XML文档,用dom4j很容易做到。请看下面的示范代码:   
  2.   
  3. import java.net.URL;   
  4.   
  5. import org.dom4j.Document;   
  6. import org.dom4j.DocumentException;   
  7. import org.dom4j.io.SAXReader;   
  8.   
  9. public class Foo {   
  10.   
  11.     public Document parse(URL url) throws DocumentException {   
  12.         SAXReader reader = new SAXReader();   
  13.         Document document = reader.read(url);   
  14.         return document;   
  15.     }   
  16. }   
  17. 使用迭代器(Iterators)   
  18.     我们可以通过多种方法来操作XML文档,这些方法返回java里标准的迭代器(Iterators)。例如:   
  19.   
  20. public void bar(Document document) throws DocumentException {   
  21.         Element root = document.getRootElement();   
  22.         //迭代根元素下面的所有子元素   
  23.         for ( Iterator i = root.elementIterator(); i.hasNext(); ) {   
  24.             Element element = (Element) i.next();   
  25.             //处理代码   
  26.         }   
  27.   
  28.         //迭代根元素下面名称为"foo"的子元素   
  29.         for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {   
  30.             Element foo = (Element) i.next();   
  31.             //处理代码   
  32.         }   
  33.   
  34.         // 迭代根元素的属性attributes)元素   
  35.         for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {   
  36.             Attribute attribute = (Attribute) i.next();   
  37.             // do something   
  38.         }   
  39.      }   
  40. 强大的XPath导航   
  41.     在dom4j中XPath可以表示出在XML树状结构中的Document或者任意的节点(Node)(例如:Attribute,Element 或者ProcessingInstruction等)。它可以使在文档中复杂的操作仅通过一行代码就可以完成。例如:   
  42.   
  43. public void bar(Document document) {   
  44.         List list = document.selectNodes( "//foo/bar" );   
  45.         Node node = document.selectSingleNode( "//foo/bar/author" );   
  46.         String name = node.valueOf( "@name" );   
  47.     }   
  48.   
  49.     如果你想得到一个XHTML文档中的所有超文本链接(hypertext links)你可以使用下面的代码:   
  50.   
  51.     public void findLinks(Document document) throws DocumentException {   
  52.   
  53.         List list = document.selectNodes( "//a/@href" );   
  54.   
  55.         for (Iterator iter = list.iterator(); iter.hasNext(); ) {   
  56.             Attribute attribute = (Attribute) iter.next();   
  57.             String url = attribute.getValue();   
  58.         }   
  59.     }   
  60.     如果你需要关于XPath语言的任何帮助,我们强烈推荐这个站点Zvon tutorial他会通过一个一个的例子引导你学习。   
  61. 快速遍历(Fast Looping)   
  62. 如果你不得不遍历一个非常大的XML文档,然后才去执行,我们建议你使用快速遍历方法(fast looping method),它可以避免为每一个循环的节点创建一个迭代器对象,如下所示:   
  63.   
  64. public void treeWalk(Document document) {   
  65.         treeWalk( document.getRootElement() );   
  66.     }   
  67.   
  68.     public void treeWalk(Element element) {   
  69.         for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {   
  70.             Node node = element.node(i);   
  71.             if ( node instanceof Element ) {   
  72.                 treeWalk( (Element) node );   
  73.             }   
  74.             else {   
  75.                 // do something....   
  76.             }   
  77.         }   
  78.     }   
  79. 生成一个新的XML文档对象   
  80.     在dom4j中你可能常常希望用程序生成一个XML文档对象,下面的程序为你进行了示范:   
  81.   
  82. import org.dom4j.Document;   
  83. import org.dom4j.DocumentHelper;   
  84. import org.dom4j.Element;   
  85.   
  86. public class Foo {   
  87.   
  88.     public Document createDocument() {   
  89.         Document document = DocumentHelper.createDocument();   
  90.         Element root = document.addElement( "root" );   
  91.   
  92.         Element author1 = root.addElement( "author" )   
  93.             .addAttribute( "name""James" )   
  94.             .addAttribute( "location""UK" )   
  95.             .addText( "James Strachan" );   
  96.            
  97.         Element author2 = root.addElement( "author" )   
  98.             .addAttribute( "name""Bob" )   
  99.             .addAttribute( "location""US" )   
  100.             .addText( "Bob McWhirter" );   
  101.   
  102.         return document;   
  103.     }   
  104. }   
  105. 将一个文档对象写入文件中   
  106.     将一个文档对象写入Writer对象的一个简单快速的途径是通过write()方法。   
  107.   
  108.         FileWriter out = new FileWriter( "foo.xml" );   
  109.         document.write( out );   
  110.   
  111. 如果你想改变输出文件的排版格式,比如你想要一个漂亮的格式或者是一个紧凑的格式,或者你想用Writer 对象或者OutputStream 对象来操作,那么你可以使用XMLWriter 类。   
  112.   
  113. import org.dom4j.Document;   
  114. import org.dom4j.io.OutputFormat;   
  115. import org.dom4j.io.XMLWriter;   
  116.   
  117. public class Foo {   
  118.   
  119.     public void write(Document document) throws IOException {   
  120.   
  121.         // 写入文件   
  122.         XMLWriter writer = new XMLWriter(   
  123.             new FileWriter( "output.xml" )   
  124.         );   
  125.         writer.write( document );   
  126.         writer.close();   
  127.   
  128.   
  129.         // 以一种优雅的格式写入System.out对象   
  130.         OutputFormat format = OutputFormat.createPrettyPrint();   
  131.         writer = new XMLWriter( System.out, format );   
  132.         writer.write( document );   
  133.   
  134.         // 以一种紧凑的格式写入System.out对象   
  135.         format = OutputFormat.createCompactFormat();   
  136.         writer = new XMLWriter( System.out, format );   
  137.         writer.write( document );   
  138.     }   
  139. }   
  140. 转化为字符串,或者从字符串转化   
  141.     如果你有一个文档(Document)对象或者任何一个节点(Node)对象的引用(reference),象属性(Attribute)或者元素(Element),你可以通过asXML()方法把它转化为一个默认的XML字符串:   
  142.   
  143.         Document document = ...;   
  144.         String text = document.asXML();   
  145.   
  146. 如果你有一些XML内容的字符串表示,你可以通过DocumentHelper.parseText()方法将它重新转化为文档(Document)对象:   
  147.   
  148.         String text = "<person> <name>James</name> </person>";   
  149.         Document document = DocumentHelper.parseText(text);   
  150. 通过XSLT样式化文档(Document)   
  151.     使用Sun公司提供的JAXP API将XSLT 应用到文档(Document)上是很简单的。它允许你使用任何的XSLT引擎(例如:Xalan或SAXON等)来开发。下面是一个使用JAXP创建一个转化器(transformer),然后将它应用到文档(Document)上的例子:   
  152.   
  153. import javax.xml.transform.Transformer;   
  154. import javax.xml.transform.TransformerFactory;   
  155.   
  156. import org.dom4j.Document;   
  157. import org.dom4j.io.DocumentResult;   
  158. import org.dom4j.io.DocumentSource;   
  159.   
  160. public class Foo {   
  161.   
  162.     public Document styleDocument(   
  163.         Document document,    
  164.         String stylesheet   
  165.     ) throws Exception {   
  166.   
  167.         // 使用 JAXP 加载转化器   
  168.         TransformerFactory factory = TransformerFactory.newInstance();   
  169.         Transformer transformer = factory.newTransformer(    
  170.             new StreamSource( stylesheet )    
  171.         );   
  172.   
  173.         // 现在来样式化一个文档(Document)   
  174.         DocumentSource source = new DocumentSource( document );   
  175.         DocumentResult result = new DocumentResult();   
  176.         transformer.transform( source, result );   
  177.   
  178.         // 返回经过样式化的文档(Document)   
  179.         Document transformedDoc = result.getDocument();   
  180.         return transformedDoc;   
  181.     }   
  182. }  
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]