﻿<?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/junglesong/category/29597.html</link><description>世上本无难事，心以为难，斯乃真难。苟不存一难之见于心，则运用之术自出。</description><language>zh-cn</language><lastBuildDate>Wed, 05 Mar 2008 08:21:12 GMT</lastBuildDate><pubDate>Wed, 05 Mar 2008 08:21:12 GMT</pubDate><ttl>60</ttl><item><title>XML(Extensible Markup Language )综述</title><link>http://www.blogjava.net/junglesong/archive/2008/03/02/183197.html</link><dc:creator>和风细雨</dc:creator><author>和风细雨</author><pubDate>Sat, 01 Mar 2008 16:09:00 GMT</pubDate><guid>http://www.blogjava.net/junglesong/archive/2008/03/02/183197.html</guid><wfw:comment>http://www.blogjava.net/junglesong/comments/183197.html</wfw:comment><comments>http://www.blogjava.net/junglesong/archive/2008/03/02/183197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junglesong/comments/commentRss/183197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junglesong/services/trackbacks/183197.html</trackback:ping><description><![CDATA[<p><strong>XML的由来<br />
</strong>XML是eXtensible Markup Language的缩写。扩展标记语言XML是一种简单的数据存储语言，使用一系列简单的标记描述数据，而这些标记可以用方便的方式建立，虽然XML占用的空间比二进制数据要占用更多的空间，但XML极其简单易于掌握和使用<br />
XML是现代程序中一个必不可少的组成部分，也是世界上发展最快的技术之一。它的主要目的是以结构化的方式来表示数据，在某些方面，XML也类似于数据库，提供数据的结构化视图。<br />
XML（可扩展标记语言）是从称为SGML（标准通用标记语言）发展而来的，SGML的主要目的是定义使用标签来表示数据的标记语言的语法。基于SGML的重要语言之一就是著名的HTML.<br />
标签由包围在一个小于号&lt;和一个大于号&gt;之间的文本组成,起始标签(tag)表示一个特定区域的开始,例如&lt;start&gt;;结束标签定义了一个区域的结束,除了在小于号之后紧跟一个斜线外和起始标签一致,例如&lt;/end&gt;.举例说明标签如下:<br />
&lt;member id=&#8220;007&#8221;&gt;邦德&lt;/member&gt;中,左边的&lt;member id=&#8220;007&#8221;&gt;是起始标签,邦德是标签中的文字,007是属性Attribute, &lt;/member &gt;是结束标签.</p>
<p><strong>XML的发展</strong></p>
<p>由于SGML中存在特殊而随意的语法(如标签的非嵌套使用),使得建立一个SGML语言的解析器成了一项艰巨的任务,这些困难导致了SGML一直停步不前.<br />
XML通过相对严格的语法规定使得建立一个XML解析器要容易得多,这些语法包括:<br />
1）任何起始标签都必须有一个结束标签。<br />
2）可以采用另一种简化语法，可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号前紧跟一个斜线/.如&lt;tag /&gt;等同于&lt;tag&gt;&lt;/tag&gt;.<br />
3）标签必须按照合适的顺序进行嵌套，在没有关闭内部节点之前不能关闭外部节点。<br />
4）所有的特性都必须有值，特性的值周围应该加上双引号。</p>
<p><strong>XML文档示例</strong></p>
<p>&lt;?xml version="1.0" encoding="GBK"?&gt;</p>
<p>&lt;members&gt; <br />
&nbsp; &lt;member name="Andy"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;age&gt;25&lt;/age&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;JSE&lt;/title&gt;<br />
&nbsp; &lt;/member&gt;<br />
&nbsp; &lt;member name="Bill"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;age&gt;35&lt;/age&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;SSE&lt;/title&gt;<br />
&nbsp; &lt;/member&gt;<br />
&nbsp; &lt;member name="Cindy"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;age&gt;45&lt;/age&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;PM&lt;/title&gt;<br />
&nbsp; &lt;/member&gt;<br />
&nbsp; &lt;member name="Douglas"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;age&gt;45&lt;/age&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;GM&lt;/title&gt;<br />
&nbsp; &lt;/member&gt;<br />
&lt;/members&gt;</p>
<p>&lt;?xml version=&#8220;1.0&#8221; encoding=&#8220;GBK&#8221;?&gt;是XML序言，这一行代码告诉解析器文件将按XML规则进行解析， GBK制定了此文件的编码方式。<br />
&lt;members&gt;是文档的根节点，一个XML中有且只有一个根节点，否则会造成解析失败。<br />
&lt;member name=&#8220;Andy&#8221;&gt;。。。&lt;/member&gt;是根节点下面的子节点，name是其特性，特性的值为Andy。这个子节点下面有age和title两个子节点。</p>
<p><strong>XML的用途</strong></p>
<p>以文本的形式存储数据,这样的形式适于机器阅读,对于人阅读也相对方便.<br />
作为程序的配置文件使用,如著名的web.xml,struts-config.xml<br />
Ajax程序传递数据的载体.<br />
WebService,SOAP的基础.</p>
<p><strong>针对XML的API</strong></p>
<p>将XML定义为一种语言之后，就出现了使用常见的编程语言（如Java）来同时表现和处理XML代码的需求。</p>
<p>首先出现的是Java上的SAX（Simple API for XML）项目。SAX提供了一个基于事件的XML解析的API。从其本质上来说，SAX解析器从文件的开头出发，从前向后解析，每当遇到起始标签或者结束标签、特性、文本或者其他的XML语法时，就会触发一个事件。然后，当事件发生时，具体要怎么做就由开发人员决定。</p>
<p>因为SAX解析器仅仅按照文本的方式来解析它们，所以SAX更轻量、更快速。而它们的主要缺点是在解析中无法停止、后退或者不从文件开始，直接访问XML结构中的指定部分。</p>
<p>DOM是针对XML的基于树的API。它关注的不仅仅是解析XML代码，而是使用一系列互相关联的对象来表示这些代码，而这些对象可以被修改且无需重新解析代码就能直接访问它们。</p>
<p>使用DOM，只需解析代码一次来创建一个树的模型；某些时候会使用SAX解析器来完成它。在这个初始解析过程之后，XML已经完全通过DOM模型来表现出来，同时也不再需要原始的代码。尽管DOM比SAX慢很多，而且，因为创建了相当多的对象而需要更多的开销，但由于它使用上的简便，因而成为Web浏览器和JavaScript最喜欢的方法。</p>
<p><strong>最方便的XML解析利器-dom4j</strong></p>
<p>Dom4j是一个易用的、开源的库，用于XML，XPath和XSLT。它应用于Java平台，采用了Java集合框架并完全支持DOM，SAX和JAXP.<br />
sax和dom本身的api都比较复杂,不易使用,而开源包dom4j却综合了二者的优点,屏蔽了晦涩的细节,封装了一系列类和接口以方便用户使用它来读写XML. </p>
<p><strong>Dom4j下载</strong></p>
<p>要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/ 目前最新dom4j包下载地址:http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip<br />
解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar.</p>
<p><strong>使用dom4j读写xml的一些常用对象</strong></p>
<p>1.Document:文档对象,它代表着整篇xml文档.<br />
2.Element:节点元素,它代表着xml文档中的一个节点元素,如前面的&lt;age&gt;25&lt;/age&gt;就是一个Element.其值(文本值)为25.<br />
3.Attribute:节点属性,如前面的节点元素&lt;member name=&#8220;Andy&#8221;&gt;&#8230;&lt; /member &gt;中, name就是节点元素的一个属性,其值(文本值)为Andy.</p>
<p><strong>与Document对象相关的API</strong></p>
<p>1.读取XML文件,获得document对象.<br />
SAXReader reader = new SAXReader();<br />
Document&nbsp; document = reader.read(new File("input.xml"));</p>
<p>2.解析XML形式的文本,得到document对象.<br />
String text = "&lt;members&gt;&lt;/members&gt;";<br />
Document document = DocumentHelper.parseText(text);</p>
<p>3.主动创建document对象.<br />
Document document = DocumentHelper.createDocument();<br />
Element root = document.addElement("members");// 创建根节点</p>
<p><strong>与Element有关的API</strong></p>
<p>1.获取文档的根节点.<br />
Element rootElm = document.getRootElement();</p>
<p>2.取得某节点的单个子节点.<br />
Element memberElm=root.element(&#8220;member&#8221;);// &#8220;member&#8221;是节点名</p>
<p>3.取得节点的文字<br />
String text=memberElm.getText();<br />
也可以用:<br />
String text=root.elementText("name");这个是取得根节点下的name字节点的文字.</p>
<p>4.取得某节点下名为"member"的所有字节点并进行遍历.<br />
List nodes = rootElm.elements("member");</p>
<p>for (Iterator it = nodes.iterator(); it.hasNext();) {<br />
&nbsp;&nbsp; Element elm = (Element) it.next();<br />
&nbsp;&nbsp; // do something<br />
}</p>
<p>5.对某节点下的所有子节点进行遍历.<br />
for(Iterator it=root.elementIterator();it.hasNext();){<br />
&nbsp;&nbsp;&nbsp; Element element = (Element) it.next();<br />
&nbsp;&nbsp;&nbsp; // do something<br />
}</p>
<p>6.在某节点下添加子节点.<br />
Element ageElm = newMemberElm.addElement("age");</p>
<p>7.设置节点文字.<br />
ageElm.setText("29");<br />
8.删除某节点.<br />
parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点</p>
<p><strong>与Attribute相关的API</strong></p>
<p>1.取得某节点下的某属性<br />
&nbsp;&nbsp;&nbsp; Element root=document.getRootElement();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; Attribute attribute=root.attribute("size");// 属性名name</p>
<p>2.取得属性的文字<br />
&nbsp;&nbsp;&nbsp; String text=attribute.getText();<br />
也可以用:<br />
&nbsp;&nbsp;&nbsp; String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.</p>
<p>3.遍历某节点的所有属性<br />
&nbsp;&nbsp;&nbsp; Element root=document.getRootElement();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; for(Iterator it=root.attributeIterator();it.hasNext();){<br />
&nbsp;Attribute attribute = (Attribute) it.next();<br />
&nbsp;String text=attribute.getText();<br />
&nbsp;System.out.println(text);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>4.设置某节点的属性和文字.<br />
&nbsp;&nbsp;&nbsp; newMemberElm.addAttribute("name", "sitinspring");</p>
<p>5.设置属性的文字<br />
&nbsp;&nbsp;&nbsp; Attribute attribute=root.attribute("name");<br />
&nbsp;&nbsp;&nbsp; attribute.setText("sitinspring");<br />
6.删除某属性<br />
&nbsp;&nbsp;&nbsp; Attribute attribute=root.attribute("size");// 属性名name<br />
&nbsp;&nbsp;&nbsp; root.remove(attribute);</p>
<p><strong>将document的内容写入XML文件</strong></p>
<p>1.文档中全为英文,不设置编码,直接写入的形式.<br />
&nbsp;&nbsp;&nbsp; XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));<br />
&nbsp;&nbsp;&nbsp; writer.write(document);<br />
&nbsp;&nbsp;&nbsp; writer.close();</p>
<p>2.文档中含有中文,设置编码格式写入的形式.<br />
&nbsp;&nbsp;&nbsp; OutputFormat format = OutputFormat.createPrettyPrint();<br />
&nbsp;&nbsp;&nbsp; format.setEncoding("GBK");&nbsp;&nbsp;&nbsp; // 指定XML编码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; writer.write(document);<br />
&nbsp;&nbsp;&nbsp; writer.close();</p>
<p><strong>字符串与XML的转换</strong></p>
<p>1.将字符串转化为XML<br />
&nbsp;&nbsp;&nbsp; String text = "&lt;members&gt; &lt;member&gt;sitinspring&lt;/member&gt; &lt;/members&gt;";<br />
&nbsp;&nbsp;&nbsp; Document document = DocumentHelper.parseText(text);</p>
<p>2.将文档或节点的XML转化为字符串.<br />
&nbsp;&nbsp;&nbsp; SAXReader reader = new SAXReader();<br />
&nbsp;&nbsp;&nbsp; Document&nbsp; document = reader.read(new File("input.xml"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; Element root=document.getRootElement();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; String docXmlText=document.asXML();<br />
&nbsp;&nbsp;&nbsp; String rootXmlText=root.asXML();<br />
&nbsp;&nbsp;&nbsp; Element memberElm=root.element("member");<br />
&nbsp;&nbsp;&nbsp; String memberXmlText=memberElm.asXML();</p>
<p><strong>使用XPath快速找到节点.</strong></p>
<p>读取的XML文档示例<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;projectDescription&gt;<br />
&nbsp; &lt;name&gt;MemberManagement&lt;/name&gt;<br />
&nbsp; &lt;comment&gt;&lt;/comment&gt;<br />
&nbsp; &lt;projects&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;project&gt;PRJ1&lt;/project&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;project&gt;PRJ2&lt;/project&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;project&gt;PRJ3&lt;/project&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;project&gt;PRJ4&lt;/project&gt;<br />
&nbsp; &lt;/projects&gt;<br />
&nbsp; &lt;buildSpec&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;buildCommand&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;org.eclipse.jdt.core.javabuilder&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arguments&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/arguments&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/buildCommand&gt;<br />
&nbsp; &lt;/buildSpec&gt;<br />
&nbsp; &lt;natures&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;nature&gt;org.eclipse.jdt.core.javanature&lt;/nature&gt;<br />
&nbsp; &lt;/natures&gt;<br />
&lt;/projectDescription&gt;</p>
<p><strong>使用XPath快速找到节点project.<br />
</strong>&nbsp;public static void main(String[] args){<br />
&nbsp;&nbsp;&nbsp; SAXReader reader = new SAXReader();<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document&nbsp; doc = reader.read(new File("sample.xml"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List projects=doc.selectNodes("/projectDescription/projects/project");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=projects.iterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element elm=(Element)it.next();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(elm.getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch(Exception ex){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/junglesong/aggbug/183197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junglesong/" target="_blank">和风细雨</a> 2008-03-02 00:09 <a href="http://www.blogjava.net/junglesong/archive/2008/03/02/183197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dom4j下载及使用Dom4j读写XML简介</title><link>http://www.blogjava.net/junglesong/archive/2008/02/21/181196.html</link><dc:creator>和风细雨</dc:creator><author>和风细雨</author><pubDate>Thu, 21 Feb 2008 12:35:00 GMT</pubDate><guid>http://www.blogjava.net/junglesong/archive/2008/02/21/181196.html</guid><wfw:comment>http://www.blogjava.net/junglesong/comments/181196.html</wfw:comment><comments>http://www.blogjava.net/junglesong/archive/2008/02/21/181196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junglesong/comments/commentRss/181196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junglesong/services/trackbacks/181196.html</trackback:ping><description><![CDATA[<p>要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/<br />
目前最新dom4j包下载地址:http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip</p>
<p>解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar.</p>
<p>以下是相关操作:</p>
<p>一.Document对象相关</p>
<p>1.读取XML文件,获得document对象.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAXReader reader = new SAXReader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document&nbsp; document = reader.read(new File("input.xml"));</p>
<p>2.解析XML形式的文本,得到document对象.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String text = "&lt;members&gt;&lt;/members&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document document = DocumentHelper.parseText(text);<br />
3.主动创建document对象.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document document = DocumentHelper.createDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element root = document.addElement("members");// 创建根节点<br />
二.节点相关</p>
<p>1.获取文档的根节点.<br />
Element rootElm = document.getRootElement();<br />
2.取得某节点的单个子节点.<br />
Element memberElm=root.element("member");// "member"是节点名<br />
3.取得节点的文字<br />
String text=memberElm.getText();<br />
也可以用:<br />
String text=root.elementText("name");这个是取得根节点下的name字节点的文字.</p>
<p>4.取得某节点下名为"member"的所有字节点并进行遍历.<br />
List nodes = rootElm.elements("member");</p>
<p>for (Iterator it = nodes.iterator(); it.hasNext();) {<br />
&nbsp;&nbsp; Element elm = (Element) it.next();<br />
&nbsp;&nbsp; // do something<br />
}<br />
5.对某节点下的所有子节点进行遍历.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(Iterator it=root.elementIterator();it.hasNext();){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element element = (Element) it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // do something<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
6.在某节点下添加子节点.<br />
Element ageElm = newMemberElm.addElement("age");<br />
7.设置节点文字.<br />
ageElm.setText("29");<br />
8.删除某节点.<br />
parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点<br />
三.属性相关.<br />
1.取得某节点下的某属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element root=document.getRootElement();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute attribute=root.attribute("size");// 属性名name<br />
2.取得属性的文字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String text=attribute.getText();<br />
也可以用:<br />
String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.</p>
<p>3.遍历某节点的所有属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element root=document.getRootElement();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(Iterator it=root.attributeIterator();it.hasNext();){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute attribute = (Attribute) it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String text=attribute.getText();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(text);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
4.设置某节点的属性和文字.<br />
newMemberElm.addAttribute("name", "sitinspring");<br />
5.设置属性的文字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute attribute=root.attribute("name");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute.setText("sitinspring");<br />
6.删除某属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute attribute=root.attribute("size");// 属性名name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.remove(attribute);<br />
四.将文档写入XML文件.<br />
1.文档中全为英文,不设置编码,直接写入的形式.<br />
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));<br />
writer.write(document);<br />
writer.close();<br />
2.文档中含有中文,设置编码格式写入的形式.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputFormat format = OutputFormat.createPrettyPrint();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.setEncoding("GBK");&nbsp;&nbsp;&nbsp; // 指定XML编码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.write(document);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer.close();<br />
五.字符串与XML的转换<br />
1.将字符串转化为XML<br />
String text = "&lt;members&gt; &lt;member&gt;sitinspring&lt;/member&gt; &lt;/members&gt;";<br />
Document document = DocumentHelper.parseText(text);<br />
2.将文档或节点的XML转化为字符串.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAXReader reader = new SAXReader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document&nbsp; document = reader.read(new File("input.xml"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element root=document.getRootElement();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String docXmlText=document.asXML();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String rootXmlText=root.asXML();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element memberElm=root.element("member");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String memberXmlText=memberElm.asXML();<br />
六.使用XPath快速找到节点.<br />
读取的XML文档示例<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;projectDescription&gt;<br />
&nbsp; &lt;name&gt;MemberManagement&lt;/name&gt;<br />
&nbsp; &lt;comment&gt;&lt;/comment&gt;<br />
&nbsp; &lt;projects&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;project&gt;PRJ1&lt;/project&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;project&gt;PRJ2&lt;/project&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;project&gt;PRJ3&lt;/project&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;project&gt;PRJ4&lt;/project&gt;<br />
&nbsp; &lt;/projects&gt;<br />
&nbsp; &lt;buildSpec&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;buildCommand&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;org.eclipse.jdt.core.javabuilder&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arguments&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/arguments&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/buildCommand&gt;<br />
&nbsp; &lt;/buildSpec&gt;<br />
&nbsp; &lt;natures&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;nature&gt;org.eclipse.jdt.core.javanature&lt;/nature&gt;<br />
&nbsp; &lt;/natures&gt;<br />
&lt;/projectDescription&gt;</p>
<p>使用XPath快速找到节点project.<br />
&nbsp;public static void main(String[] args){<br />
&nbsp;&nbsp;&nbsp; SAXReader reader = new SAXReader();<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document&nbsp; doc = reader.read(new File("sample.xml"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List projects=doc.selectNodes("/projectDescription/projects/project");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=projects.iterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element elm=(Element)it.next();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(elm.getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch(Exception ex){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
 <img src ="http://www.blogjava.net/junglesong/aggbug/181196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junglesong/" target="_blank">和风细雨</a> 2008-02-21 20:35 <a href="http://www.blogjava.net/junglesong/archive/2008/02/21/181196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>