﻿<?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-lishen226-随笔分类-XML</title><link>http://www.blogjava.net/lishen226/category/39440.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2009 10:08:18 GMT</lastBuildDate><pubDate>Thu, 07 May 2009 10:08:18 GMT</pubDate><ttl>60</ttl><item><title>[转]dom4j实例</title><link>http://www.blogjava.net/lishen226/archive/2009/05/06/269156.html</link><dc:creator>锋行</dc:creator><author>锋行</author><pubDate>Wed, 06 May 2009 01:30:00 GMT</pubDate><guid>http://www.blogjava.net/lishen226/archive/2009/05/06/269156.html</guid><wfw:comment>http://www.blogjava.net/lishen226/comments/269156.html</wfw:comment><comments>http://www.blogjava.net/lishen226/archive/2009/05/06/269156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lishen226/comments/commentRss/269156.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lishen226/services/trackbacks/269156.html</trackback:ping><description><![CDATA[<h3 class="type_reprint" title="转载"><a href="/blog/306572">dom4j实例</a></h3>
<p class="type_reprint" title="转载">http://haiyupeter.javaeye.com/blog/306572</p>
<strong>关键字: dom4j实例</strong>
<div class="blog_content">
<p>&nbsp;国外的dom4j已经很流行了，国内的相关资料相对较少，但普及风暴也即将到来。我们公司（老外开的）解析XML就是用的dom4j。<br />
&nbsp; 今天公司没事做，自己也写一个小例子贴上来，嘻~~<br />
&nbsp;<br />
books.xml:</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="#"><img alt="复制代码" src="http://www.blogjava.net/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-xml">
    <li><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="tag">&lt;</span><span class="tag-name">books</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments">&lt;!--This&nbsp;is&nbsp;a&nbsp;test&nbsp;for&nbsp;dom4j,&nbsp;jakoes,&nbsp;2007.7.19--&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">book</span><span>&nbsp;</span><span class="attribute">show</span><span>=</span><span class="attribute-value">"yes"</span><span>&nbsp;</span><span class="attribute">url</span><span>=</span><span class="attribute-value">"lucene.net"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">title</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"456"</span><span class="tag">&gt;</span><span>Lucene&nbsp;Studing</span><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">book</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">book</span><span>&nbsp;</span><span class="attribute">show</span><span>=</span><span class="attribute-value">"yes"</span><span>&nbsp;</span><span class="attribute">url</span><span>=</span><span class="attribute-value">"dom4j.com"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">title</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"123"</span><span class="tag">&gt;</span><span>Dom4j&nbsp;Tutorials</span><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">book</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">book</span><span>&nbsp;</span><span class="attribute">show</span><span>=</span><span class="attribute-value">"no"</span><span>&nbsp;</span><span class="attribute">url</span><span>=</span><span class="attribute-value">"spring.org"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">title</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"789"</span><span class="tag">&gt;</span><span>Spring&nbsp;in&nbsp;Action</span><span class="tag">&lt;/</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">book</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">owner</span><span class="tag">&gt;</span><span>O'Reilly</span><span class="tag">&lt;/</span><span class="tag-name">owner</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="tag">&lt;/</span><span class="tag-name">books</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre style="display: none" class="xml" name="code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;books&gt;
&lt;!--This is a test for dom4j, jakoes, 2007.7.19--&gt;
&lt;book show="yes" url="lucene.net"&gt;
&lt;title id="456"&gt;Lucene Studing&lt;/title&gt;
&lt;/book&gt;
&lt;book show="yes" url="dom4j.com"&gt;
&lt;title id="123"&gt;Dom4j Tutorials&lt;/title&gt;
&lt;/book&gt;
&lt;book show="no" url="spring.org"&gt;
&lt;title id="789"&gt;Spring in Action&lt;/title&gt;
&lt;/book&gt;
&lt;owner&gt;O'Reilly&lt;/owner&gt;
&lt;/books&gt;</pre>
&nbsp;
<p><br />
<br />
下面我们使用dom4j的xPath来解析：<br />
<br />
segment of ParseXML.java:<br />
</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="#"><img alt="复制代码" src="http://www.blogjava.net/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;parseBooks(){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;reader&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SAXReader(); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;=&nbsp;reader.read(</span><span class="string">"books.xml"</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;root&nbsp;=&nbsp;doc.selectSingleNode(</span><span class="string">"/books"</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;=&nbsp;root.selectNodes(</span><span class="string">"book[@url='dom4j.com']"</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(Object&nbsp;o:list){ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;e&nbsp;=&nbsp;(Element)&nbsp;o; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;show=e.attributeValue(</span><span class="string">"show"</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"show&nbsp;=&nbsp;"</span><span>&nbsp;+&nbsp;show); &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre style="display: none" class="java" name="code">    public void parseBooks(){
SAXReader reader = new SAXReader();
try {
Document doc = reader.read("books.xml");
Node root = doc.selectSingleNode("/books");
List list = root.selectNodes("book[@url='dom4j.com']");
for(Object o:list){
Element e = (Element) o;
String show=e.attributeValue("show");
System.out.println("show = " + show);
}
} catch (Exception e) {
e.printStackTrace();
}
}
</pre>
&nbsp;
<p><br />
&nbsp; Document doc = reader.read("books.xml");的意思是加载XML文档，此是可以用doc.asXML()来查看，它将打印整个xml文档。<br />
<br />
&nbsp; Node root = doc.selectSingleNode("/books");是读取刚才加载的xml文档内的books节点下的所有内容，对于本例也是整个xml文档。<br />
&nbsp; 当然我们也可以加载/books下的某一个节点，如：book节点<br />
Node root = doc.selectSingleNode("/books/book");<br />
或：Node root = doc.selectSingleNode("/books/*");<br />
注意：如果有多个book节点，它只会读取第一个<br />
root.asXML()将打印：<br />
&lt;book show="yes" url="lucene.net"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title id="456"&gt;Lucene Studing&lt;/title&gt;<br />
&lt;/book&gt;<br />
<br />
&nbsp; 既然加载了这么多，那我怎么精确的得到我想要的节点呢，别急，看下面：<br />
List list = root.selectNodes("book[@url='dom4j.com']");<br />
它的意思就是读取books节点下的book节点，且book的节点的url属性为dom4j.com<br />
为什么使用list来接收呢，如果有两个book节点，且它们的url属性都为dom4j.com，此时就封闭到list里了。<br />
<br />
&nbsp; 如果想读取books下的所有book节点，可以这样：<br />
List list = root.selectNodes("book");<br />
<br />
&nbsp; 如果想读取books节点下的book节点下的title节点，可以这样：<br />
List list2 = root.selectNodes("book[@url='dom4j.com']/title[@id='123']");<br />
<br />
&nbsp; 注意：selectNodes()参数的格式：<br />
&nbsp; 节点名[@属性名='属性值']，如：book[@url='dom4j.com']<br />
&nbsp; 如果有多个节点，用&#8220;/&#8221;分开，如：book[@url='dom4j.com']/title[@id='123']<br />
<br />
&nbsp; 最近就是读取封闭在List里的内容了，可以用Node来读取，也可以用Element来转换。<br />
attributeValue("属性")是读取该节点的属性值<br />
getText()是读取节点的的内容。</p>
</div>
 <img src ="http://www.blogjava.net/lishen226/aggbug/269156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lishen226/" target="_blank">锋行</a> 2009-05-06 09:30 <a href="http://www.blogjava.net/lishen226/archive/2009/05/06/269156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>