﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-自大的人只想着怎么把面子保住，自强的人只想着怎么把事办好！-文章分类-XML</title><link>http://www.blogjava.net/mlzry0612/category/22491.html</link><description>自大的人只想着怎么把面子保住，自强的人只想着怎么把事办好！</description><language>zh-cn</language><lastBuildDate>Wed, 16 May 2007 10:37:51 GMT</lastBuildDate><pubDate>Wed, 16 May 2007 10:37:51 GMT</pubDate><ttl>60</ttl><item><title>XML</title><link>http://www.blogjava.net/mlzry0612/articles/117900.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Wed, 16 May 2007 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/mlzry0612/articles/117900.html</guid><wfw:comment>http://www.blogjava.net/mlzry0612/comments/117900.html</wfw:comment><comments>http://www.blogjava.net/mlzry0612/articles/117900.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlzry0612/comments/commentRss/117900.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlzry0612/services/trackbacks/117900.html</trackback:ping><description><![CDATA[<h3>dom4j（Version 1.6.1）快速入门</h3>
<div style="MARGIN: 0px auto">&nbsp;</div>
<p>Parsing XML</p>
<p>或许你想要做的第一件事情就是解析一个某种类型的XML文档，用dom4j很容易做到。请看下面的示范代码：</p>
<p>import java.net.URL;</p>
<p>import org.dom4j.Document;<br>import org.dom4j.DocumentException;<br>import org.dom4j.io.SAXReader;</p>
<p>public class Foo {</p>
<p>public Document parse(URL url) throws DocumentException {<br>SAXReader reader = new SAXReader();<br>Document document = reader.read(url);<br>return document;<br>}<br>}</p>
<div id=a000315more>
<div id=more>
<p>使用迭代器（Iterators）</p>
<p>我们可以通过多种方法来操作XML文档，这些方法返回java里标准的迭代器（Iterators）。例如：</p>
<p>public void bar(Document document) throws DocumentException {<br>Element root = document.getRootElement();<br>//迭代根元素下面的所有子元素<br>for ( Iterator i = root.elementIterator(); i.hasNext(); ) {<br>Element element = (Element) i.next();<br>//处理代码<br>}</p>
<p>//迭代根元素下面名称为"foo"的子元素<br>for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {<br>Element foo = (Element) i.next();<br>//处理代码<br>}</p>
<p>// 迭代根元素的属性attributes）元素<br>for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {<br>Attribute attribute = (Attribute) i.next();<br>// do something<br>}<br>}</p>
<p>强大的XPath导航</p>
<p>在dom4j中XPath可以表示出在XML树状结构中的Document或者任意的节点（Node）（例如：Attribute，Element 或者 ProcessingInstruction等）。它可以使在文档中复杂的操作仅通过一行代码就可以完成。例如：</p>
<p>public void bar(Document document) {<br>List list = document.selectNodes( "//foo/bar" );</p>
<p>Node node = document.selectSingleNode( "//foo/bar/author" );</p>
<p>String name = node.valueOf( "@name" );<br>}</p>
<p>如果你想得到一个XHTML文档中的所有超文本链接（hypertext links）你可以使用下面的代码：</p>
<p>public void findLinks(Document document) throws DocumentException {</p>
<p>List list = document.selectNodes( "//a/@href" );</p>
<p>for (Iterator iter = list.iterator(); iter.hasNext(); ) {<br>Attribute attribute = (Attribute) iter.next();<br>String url = attribute.getValue();<br>}<br>}</p>
<p>如果你需要关于XPath语言的任何帮助，我们强烈推荐这个站点Zvon tutorial他会通过一个一个的例子引导你学习。</p>
<p>快速遍历（Fast Looping）</p>
<p><br>如果你不得不遍历一个非常大的XML文档，然后才去执行，我们建议你使用快速遍历方法（fast looping method），它可以避免为每一个循环的节点创建一个迭代器对象,如下所示：</p>
<p>public void treeWalk(Document document) {<br>treeWalk( document.getRootElement() );<br>}</p>
<p>public void treeWalk(Element element) {<br>for ( int i = 0, size = element.nodeCount(); i &lt; size; i++ ) {<br>Node node = element.node(i);<br>if ( node instanceof Element ) {<br>treeWalk( (Element) node );<br>}<br>else {<br>// do something....<br>}<br>}<br>}</p>
<p>生成一个新的XML文档对象</p>
<p>在dom4j中你可能常常希望用程序生成一个XML文档对象，下面的程序为你进行了示范：</p>
<p>import org.dom4j.Document;<br>import org.dom4j.DocumentHelper;<br>import org.dom4j.Element;</p>
<p>public class Foo {</p>
<p>public Document createDocument() {<br>Document document = DocumentHelper.createDocument();<br>Element root = document.addElement( "root" );</p>
<p>Element author1 = root.addElement( "author" )<br>.addAttribute( "name", "James" )<br>.addAttribute( "location", "UK" )<br>.addText( "James Strachan" );<br><br>Element author2 = root.addElement( "author" )<br>.addAttribute( "name", "Bob" )<br>.addAttribute( "location", "US" )<br>.addText( "Bob McWhirter" );</p>
<p>return document;<br>}<br>}</p>
<p>将一个文档对象写入文件中</p>
<p>将一个文档对象写入Writer对象的一个简单快速的途径是通过write()方法。</p>
<p>FileWriter out = new FileWriter( "foo.xml" );<br>document.write( out );</p>
<p>如果你想改变输出文件的排版格式，比如你想要一个漂亮的格式或者是一个紧凑的格式，或者你想用Writer 对象或者OutputStream 对象来操作，那么你可以使用XMLWriter 类。</p>
<p>import org.dom4j.Document;<br>import org.dom4j.io.OutputFormat;<br>import org.dom4j.io.XMLWriter;</p>
<p>public class Foo {</p>
<p>public void write(Document document) throws IOException {</p>
<p>// 写入文件<br>XMLWriter writer = new XMLWriter(<br>new FileWriter( "output.xml" )<br>);<br>writer.write( document );<br>writer.close();</p>
<p><br>// 以一种优雅的格式写入System.out对象<br>OutputFormat format = OutputFormat.createPrettyPrint();<br>writer = new XMLWriter( System.out, format );<br>writer.write( document );</p>
<p>// 以一种紧凑的格式写入System.out对象<br>format = OutputFormat.createCompactFormat();<br>writer = new XMLWriter( System.out, format );<br>writer.write( document );<br>}<br>}</p>
<p>转化为字符串，或者从字符串转化</p>
<p>如果你有一个文档（Document）对象或者任何一个节点（Node）对象的引用（reference），象属性（Attribute）或者元素（Element），你可以通过asXML()方法把它转化为一个默认的XML字符串：</p>
<p>Document document = ...;<br>String text = document.asXML();</p>
<p>如果你有一些XML内容的字符串表示，你可以通过DocumentHelper.parseText()方法将它重新转化为文档（Document）对象：</p>
<p>String text = "
<person> <name>James</name> </person>
";<br>Document document = DocumentHelper.parseText(text);</p>
<p>通过XSLT样式化文档（Document）</p>
<p><br>使用Sun公司提供的JAXP API将XSLT 应用到文档（Document）上是很简单的。它允许你使用任何的XSLT引擎（例如：Xalan或SAXON等）来开发。下面是一个使用JAXP创建一个转化器（transformer），然后将它应用到文档（Document）上的例子：</p>
<p>import javax.xml.transform.Transformer;<br>import javax.xml.transform.TransformerFactory;</p>
<p>import org.dom4j.Document;<br>import org.dom4j.io.DocumentResult;<br>import org.dom4j.io.DocumentSource;</p>
<p>public class Foo {</p>
<p>public Document styleDocument(<br>Document document, <br>String stylesheet<br>) throws Exception {</p>
<p>// 使用 JAXP 加载转化器<br>TransformerFactory factory = TransformerFactory.newInstance();<br>Transformer transformer = factory.newTransformer( <br>new StreamSource( stylesheet ) <br>);</p>
<p>// 现在来样式化一个文档（Document）<br>DocumentSource source = new DocumentSource( document );<br>DocumentResult result = new DocumentResult();<br>transformer.transform( source, result );</p>
<p>// 返回经过样式化的文档（Document）<br>Document transformedDoc = result.getDocument();<br>return transformedDoc;<br>}<br>}</p>
</div>
</div>
<img src ="http://www.blogjava.net/mlzry0612/aggbug/117900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlzry0612/" target="_blank">Daniel</a> 2007-05-16 17:52 <a href="http://www.blogjava.net/mlzry0612/articles/117900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>