﻿<?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/goldstar/category/43042.html</link><description>哥只是个传说</description><language>zh-cn</language><lastBuildDate>Mon, 14 Dec 2009 13:41:03 GMT</lastBuildDate><pubDate>Mon, 14 Dec 2009 13:41:03 GMT</pubDate><ttl>60</ttl><item><title>什么是dtd文件，为什么须要DTD</title><link>http://www.blogjava.net/goldstar/articles/305409.html</link><dc:creator>天外流星</dc:creator><author>天外流星</author><pubDate>Thu, 10 Dec 2009 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/goldstar/articles/305409.html</guid><wfw:comment>http://www.blogjava.net/goldstar/comments/305409.html</wfw:comment><comments>http://www.blogjava.net/goldstar/articles/305409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/goldstar/comments/commentRss/305409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/goldstar/services/trackbacks/305409.html</trackback:ping><description><![CDATA[<p>DTD为英文Document Type Definition，中文意思为&#8220;文档类定义&#8221;。DTD肩负着两重任务: 一方面它帮助你编写合法的代码 ，另一方面它让浏览器正确地显示器代码。也许你会问它们居然有这样的能力？</p>
<p>如是你是一个个网页制作者，你会很清楚地知道一个HTML文档的基本结构可分为两个主要部分；</p>
<div class="code">
<pre>&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  头部信息<br />
&nbsp;&nbsp;&nbsp;  &lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  可视内容<br />
&nbsp;&nbsp;&nbsp;  &lt;/body&gt;<br />
&lt;/html&gt;</pre>
</div>
<p>上面的代码你是再熟悉不过的了。但你知道下面的代码既是正确的又是错误的吗？</p>
<div class="code">&lt;P align="center"&gt;这是一个居中段落&lt;/P&gt;</div>
<p>在XHTML中，标记是区分大小写的，上面的代码毫无意义。可在HTML中它是一个居中段落。浏览器是怎样处理这种情况呢？难道浏览器认为你写的是HTML，然后把它作为一个一个居中段落显示？如是你写的是XHTML呢，它将是一段不可显示的代码！浏览器是怎样知道你用的是什么标记语言然后正确对待这段代码呢？</p>
<p>这就是DTD的工作了。一个DTD应该放在每一个文档的第一行（包括空白）.这样正确地放置，你的DTD才能告诉浏览器的用的是什么标记语言。在通常情况下，如果你编写的是正确代码，并拥有一个合适的DTD，浏览器将会根据W3C的标准显示你的代码。</p>
<p>如果说你没有使用DTD，你将很难预测浏览器是怎样显示你的代码，仅仅在同一浏览器就有不同的显示效果。尽管你的网页做得非常飘亮，要是没有使用DTD，你的努力也是白费的。因此，一个DTD是必不可少的。</p>
<p>如果你正在做网页，你的DTD应该反映出你用的是什么标记语言。下面是一个DTD列表，你应该使用其中之一。</p>
<ul>
    <li><strong>XHTML 1.1</strong>
    <div class="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;</div>
    <li><strong>XHTML1.0 Strict DTD</strong>（严格的文档类定义）:要求严格的DTD，你不能使用表现标识和属性，和CSS一同使用。完整代码如下：
    <div class="code">
    <pre>&nbsp;&nbsp;&nbsp;&nbsp;  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"<br />
    &nbsp;&nbsp;&nbsp;  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</pre>
    </div>
    <p>&nbsp;</p>
    <li><strong>XHTML1.0 Transitional DTD</strong>（过渡的文档类定义）:要求非常宽松的DTD，它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。完整代码如下：
    <div class="code">
    <pre>&nbsp;&nbsp;&nbsp;  &lt;!DOCTYPE html&nbsp;&nbsp;&nbsp;  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"<br />
    &nbsp;&nbsp;&nbsp;  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</pre>
    </div>
    <p>&nbsp;</p>
    <li><strong>XHTML1.0 Frameset DTD</strong>（框架集文档类定义）:专门针对框架页面设计使用的DTD，如果你的页面中包含有框架，需要采用这种DTD。完整代码如下：
    <div class="code">
    <pre>&nbsp;&nbsp;&nbsp;  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"<br />
    &nbsp;&nbsp;&nbsp;  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>
    </div>
    <li><strong>HTML 4.01 Strict DTD </strong>（严格的文档类定义）不能包含已过时的元素（或属性）和框架元素。对于使用了这类DTD的文档，使用如下文档声明：
    <div class="code">
    <pre>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  "http://www.w3.org/TR/html4/strict.dtd"&gt;&nbsp;&nbsp;</pre>
    </div>
    <li>H<strong>TML 4.01 Transitional DTD</strong>（过渡的文档类定义）能包含已过时的元素和属性但不能包含框架元素。。对于使用了这类DTD的文档，使用如下文档声明：
    <div class="code">
    <pre>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  "http://www.w3.org/TR/html4/loose.dtd"&gt;&nbsp;&nbsp;</pre>
    </div>
    <li><strong>HTML 4.01 Frameset DTD</strong>（框架集文档类定义）。能包含已过时的元素和框架元素。。对于使用了这类DTD的文档，使用如下文档声明：
    <div class="code">
    <pre>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  "http://www.w3.org/TR/html4/frameset.dtd"&gt;</pre>
    </div>
    <li><strong>HTML 3.2</strong>
    <div class="code">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;</div>
    <li><strong>HTML 2.0</strong>
    <div class="code">&lt;!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"&gt;</div>
    </li>
</ul>
<p>&nbsp;</p>
<p>下面是一个合法的HTML文档。</p>
<div class="code">
<pre>&lt;!DOCTYPE html&nbsp;&nbsp;&nbsp;  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"<br />
&nbsp;&nbsp;&nbsp;  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  头部信息<br />
&nbsp;&nbsp;&nbsp;  &lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  可视内容<br />
&nbsp;&nbsp;&nbsp;  &lt;/body&gt;</pre>
</div>
<img src ="http://www.blogjava.net/goldstar/aggbug/305409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/goldstar/" target="_blank">天外流星</a> 2009-12-10 13:19 <a href="http://www.blogjava.net/goldstar/articles/305409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDOM使用详解及实例</title><link>http://www.blogjava.net/goldstar/articles/305406.html</link><dc:creator>天外流星</dc:creator><author>天外流星</author><pubDate>Thu, 10 Dec 2009 05:14:00 GMT</pubDate><guid>http://www.blogjava.net/goldstar/articles/305406.html</guid><wfw:comment>http://www.blogjava.net/goldstar/comments/305406.html</wfw:comment><comments>http://www.blogjava.net/goldstar/articles/305406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/goldstar/comments/commentRss/305406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/goldstar/services/trackbacks/305406.html</trackback:ping><description><![CDATA[<p>以下内容出自：<a href="http://www.webdn.com/web_file/3sword/xml/0602016011/">http://www.webdn.com/web_file/3sword/xml/0602016011/</a></p>
<p class="pageTitle"><span class="headerOrange">JDOM使用详解及实例 </span></p>
<p>&nbsp;</p>
<p>【摘 要】<span class="checkoutHeader"><strong>JDOM是一个开源项目，它基于树型结构，利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。</strong></span><font color="#009900"></font></p>
<div>
<p>一、JDOM 简介</p>
<p>JDOM是一个开源项目，它基于树型结构，利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。</p>
<p>JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性（方法重载、集合概念以及映射），把SAX和DOM的功能有效地结合起来。</p>
<p>在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。</p>
<p>JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter开发出来，以弥补DOM及SAX在实际应用当中的不足之处。</p>
<p>这些不足之处主要在于SAX没有文档修改、随机访问以及输出的功能，而对于DOM来说，JAVA程序员在使用时来用起来总觉得不太方便。</p>
<p>DOM的缺点主要是来自于由于Dom是一个接口定义语言（IDL）,它的任务是在不同语言实现中的一个最低的通用标准，并不是为JAVA特别设计的。JDOM的最新版本为JDOM Beta 9。最近JDOM被收录到JSR-102内，这标志着JDOM成为了JAVA平台组成的一部分。</p>
<p>二、JDOM 包概览</p>
<p>JDOM是由以下几个包组成的<br />
org.jdom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包含了所有的xml文档要素的java类</p>
<p>&nbsp;</p>
<p>org.jdom.adapters&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包含了与dom适配的java类</p>
<p>&nbsp;</p>
<p>org.jdom.filter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包含了xml文档的过滤器类</p>
<p>&nbsp;</p>
<p>org.jdom.input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包含了读取xml文档的类</p>
<p>&nbsp;</p>
<p>org.jdom.output&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包含了写入xml文档的类</p>
<p>&nbsp;</p>
<p>org.jdom.transform&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包含了将jdom xml文档接口转换为其他xml文档接口</p>
<p>&nbsp;</p>
<p>org.jdom.xpath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包含了对xml文档xpath操作的类三、JDOM 类说明</p>
<p>1、org.JDOM这个包里的类是你J解析xml文件后所要用到的所有数据类型。</p>
<p>Attribute</p>
<p>CDATA</p>
<p>Coment</p>
<p>DocType</p>
<p>Document</p>
<p>Element</p>
<p>EntityRef</p>
<p>Namespace</p>
<p>ProscessingInstruction</p>
<p>Text</p>
<p>2、org.JDOM.transform在涉及xslt格式转换时应使用下面的2个类</p>
<p>JDOMSource</p>
<p>JDOMResult</p>
<p>org.JDOM.input</p>
<p>3、输入类，一般用于文档的创建工作</p>
<p>SAXBuilder</p>
<p>DOMBuilder</p>
<p>ResultSetBuilder</p>
<p>org.JDOM.output</p>
<p>4、输出类，用于文档转换输出</p>
<p>XMLOutputter</p>
<p>SAXOutputter</p>
<p>DomOutputter</p>
<p>JTreeOutputter</p>
<p>使用前注意事项：</p>
<p>1.JDOM对于JAXP 以及 TRax 的支持</p>
<p>JDOM 支持JAXP1.1：你可以在程序中使用任何的parser工具类,默认情况下是JAXP的parser。</p>
<p>制定特别的parser可用如下形式</p>
<p>SAXBuilder parser </p>
<p>&nbsp;&nbsp; = new SAXBuilder("org.apache.crimson.parser.XMLReaderImpl");</p>
<p>Document doc = parser.build("http://www.cafeconleche.org/");</p>
<p>// work with the document...</p>
<p>JDOM也支持TRaX：XSLT可通过JDOMSource以及JDOMResult类来转换（参见以后章节）</p>
<p>2.注意在JDOM里文档（Document）类由org.JDOM.Document 来表示。这要与org.w3c.dom中的Document区别开，这2种格式如何转换在后面会说明。</p>
<p>以下如无特指均指JDOM里的Document。</p>
<p>四、JDOM主要使用方法</p>
<p>1.Ducument类</p>
<p>(1)Document的操作方法：</p>
<p>Element root = new Element("GREETING");</p>
<p>Document doc = new Document(root);</p>
<p>root.setText("Hello JDOM!");</p>
<p>或者简单的使用Document doc = new Document(new Element("GREETING").setText("Hello JDOM!t"));</p>
<p>这点和DOM不同。Dom则需要更为复杂的代码，如下：</p>
<p>DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();</p>
<p>DocumentBuilder builder =factory.newDocumentBuilder();</p>
<p>Document doc = builder.newDocument();</p>
<p>Element root =doc.createElement("root");</p>
<p>Text text = doc.createText("This is the root");</p>
<p>root.appendChild(text);</p>
<p>doc.appendChild(root);</p>
<p>注意事项：JDOM不允许同一个节点同时被2个或多个文档相关联，要在第2个文档中使用原来老文档中的节点的话。首先需要使用detach()把这个节点分开来。</p>
<p>(2)从文件、流、系统ID、URL得到Document对象：</p>
<p>DOMBuilder builder = new DOMBuilder();</p>
<p>Document doc = builder.build(new File("jdom_test.xml"));</p>
<p>SAXBuilder builder = new SAXBuilder();</p>
<p>Document doc = builder.build(url);</p>
<p>在新版本中DOMBuilder 已经Deprecated掉 DOMBuilder.builder(url)，用SAX效率会比较快。</p>
<p>这里举一个小例子，为了简单起见，使用String对象直接作为xml数据源：</p>
<p>public jdomTest() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; String textXml = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; textXml = "&lt;note&gt;";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; textXml = textXml +</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;to&gt;aaa&lt;/to&gt;&lt;from&gt;bbb&lt;/from&gt;&lt;heading&gt;ccc&lt;/heading&gt;&lt;body&gt;ddd&lt;/body&gt;";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; textXml = textXml + "&lt;/note&gt;";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; SAXBuilder builder = new SAXBuilder();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Document doc = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Reader in= new StringReader(textXml);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc = builder.build(in);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element root = doc.getRootElement();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List ls = root.getChildren();//注意此处取出的是root节点下面的一层的Element集合</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator iter = ls.iterator(); iter.hasNext(); ) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element el = (Element) iter.next();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(el.getName().equals("to")){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(el.getText());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; catch (IOException ex) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; catch (JDOMException ex) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp; }</p>
<p>(3)DOM的document和JDOM的Document之间的相互转换使用方法，简单！</p>
<p>DOMBuilder builder = new DOMBuilder();</p>
<p>org.jdom.Document jdomDocument = builder.build(domDocument);</p>
<p>DOMOutputter converter = new DOMOutputter();// work with the JDOM document&#8230;</p>
<p>org.w3c.dom.Document domDocument = converter.output(jdomDocument);</p>
<p>// work with the DOM document&#8230;</p>
<p>2.XML文档输出</p>
<p>XMLOutPutter类：</p>
<p>JDOM的输出非常灵活,支持很多种io格式以及风格的输出</p>
<p>Document doc = new Document(...);</p>
<p>XMLOutputter outp = new XMLOutputter();</p>
<p>outp.output(doc, fileOutputStream); // Raw output</p>
<p>outp.setTextTrim(true); // Compressed output</p>
<p>outp.output(doc, socket.getOutputStream());</p>
<p>outp.setIndent(" ");// Pretty output</p>
<p>outp.setNewlines(true);</p>
<p>outp.output(doc, System.out);</p>
<p>详细请参阅最新的JDOM API手册</p>
<p>3.Element 类：</p>
<p>(1)浏览Element树</p>
<p>Element root = doc.getRootElement();//获得根元素element</p>
<p>List allChildren = root.getChildren();// 获得所有子元素的一个list</p>
<p>List namedChildren = root.getChildren("name");// 获得指定名称子元素的list</p>
<p>Element child = root.getChild("name");//获得指定名称的第一个子元素</p>
<p>JDOM给了我们很多很灵活的使用方法来管理子元素（这里的List是java.util.List）</p>
<p>List allChildren = root.getChildren();</p>
<p>allChildren.remove(3); // 删除第四个子元素</p>
<p>allChildren.removeAll(root.getChildren("jack"));// 删除叫&#8220;jack&#8221;的子元素</p>
<p>root.removeChildren("jack"); // 便捷写法</p>
<p>allChildren.add(new Element("jane"));// 加入</p>
<p>root.addContent(new Element("jane")); // 便捷写法</p>
<p>allChildren.add(0, new Element("first"));</p>
<p>(2)移动Elements:</p>
<p>在JDOM里很简单</p>
<p>Element movable = new Element("movable");</p>
<p>parent1.addContent(movable); // place</p>
<p>parent1.removeContent(movable); // remove</p>
<p>parent2.addContent(movable); // add</p>
<p>在Dom里</p>
<p>Element movable = doc1.createElement("movable");</p>
<p>parent1.appendChild(movable); // place</p>
<p>parent1.removeChild(movable); // remove</p>
<p>parent2.appendChild(movable); // 出错!</p>
<p>补充：纠错性</p>
<p>JDOM的Element构造函数（以及它的其他函数）会检查element是否合法。</p>
<p>而它的add/remove方法会检查树结构，检查内容如下：</p>
<p>1.在任何树中是否有回环节点</p>
<p>2.是否只有一个根节点</p>
<p>3.是否有一致的命名空间（Namespaces） </p>
<p>(3)Element的text内容读取</p>
<p>&lt;description&gt;</p>
<p>A cool demo</p>
<p>&lt;/description&gt;</p>
<p>// The text is directly available</p>
<p>// Returns "\n A cool demo\n"</p>
<p>String desc = element.getText();</p>
<p>// There's a convenient shortcut</p>
<p>// Returns "A cool demo"</p>
<p>String desc = element.getTextTrim();</p>
<p>(4)Elment内容修改</p>
<p>element.setText("A new description");</p>
<p>3.可正确解释特殊字符</p>
<p>element.setText("&lt;xml&gt; content");</p>
<p>4.CDATA的数据写入、读出</p>
<p>element.addContent(new CDATA("&lt;xml&gt; content"));</p>
<p>String noDifference = element.getText();</p>
<p>混合内容</p>
<p>element可能包含很多种内容，比如说</p>
<p>&lt;table&gt;</p>
<p>&lt;!-- Some comment --&gt;</p>
<p>Some text</p>
<p>&lt;tr&gt;Some child element&lt;/tr&gt;</p>
<p>&lt;/table&gt;</p>
<p>取table的子元素tr</p>
<p>String text = table.getTextTrim();</p>
<p>Element tr = table.getChild("tr");</p>
<p>也可使用另外一个比较简单的方法</p>
<p>List mixedCo = table.getContent();</p>
<p>Iterator itr = mixedCo.iterator();</p>
<p>while (itr.hasNext()) {</p>
<p>Object o = i.next();</p>
<p>if (o instanceof Comment) {...}</p>
<p>// 这里可以写成Comment, Element, Text, CDATA,ProcessingInstruction, 或者是EntityRef的类型</p>
<p>}</p>
<p>// 现在移除Comment,注意这里游标应为1。这是由于回车键也被解析成Text类的缘故,所以Comment项应为1。</p>
<p>mixedCo.remove(1); </p>
<p>4.Attribute类</p>
<p>&lt;table width="100%" border="0"&gt; &lt;/table&gt;</p>
<p>String width = table.getAttributeValue("width");//获得attribute</p>
<p>int border = table.getAttribute("width").getIntValue();</p>
<p>table.setAttribute("vspace", "0");//设置attribute</p>
<p>table.removeAttribute("vspace");// 删除一个或全部attribute</p>
<p>table.getAttributes().clear(); </p>
<p>5.处理指令(Processing Instructions)操作</p>
<p>一个Pls的例子</p>
<p>&lt;?br?&gt;</p>
<p>&lt;?cocoon-process type="xslt"?&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据</p>
<p>处理目标名称(Target)</p>
<p>String target = pi.getTarget();</p>
<p>获得所有数据（data），在目标（target）以后的所有数据都会被返回。</p>
<p>String data = pi.getData();</p>
<p>String type = pi.getValue("type");获得指定属性的数据</p>
<p>List ls = pi.getNames();获得所有属性的名称</p>
<p>6.命名空间操作</p>
<p>&lt;xhtml:html </p>
<p>xmlns:xhtml="http://www.w3.org/1999/xhtml"&gt;</p>
<p>&lt;xhtml:title&gt;Home Page&lt;/xhtml:title&gt;</p>
<p>&lt;/xhtml:html&gt;</p>
<p>Namespace xhtml = Namespace.getNamespace("xhtml", "http://www.w3.org/1999/xhtml");</p>
<p>List kids = html.getChildren("title", xhtml);</p>
<p>Element kid = html.getChild("title", xhtml);</p>
<p>kid.addContent(new Element("table", xhtml));</p>
<p>7.XSLT格式转换</p>
<p>使用以下函数可对XSLT转换</p>
<p>最后如果你需要使用w3c的Document则需要转换一下。</p>
<p>public static Document transform(String stylesheet，Document in)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws JDOMException {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transformer transformer = TransformerFactory.newInstance()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .newTransformer(new StreamSource(stylesheet));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JDOMResult out = new JDOMResult();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transformer.transform(new JDOMSource(in), out);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return out.getDeocument();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (TransformerException e) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new JDOMException("XSLT Trandformation failed", e);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>五、用例:</p>
<p>1、生成xml文档：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>public class WriteXML{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; public void BuildXML() throws Exception {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element root,student,number,name,age;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root = new Element("student-info"); //生成根元素：student-info</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; student = new Element("student"); //生成元素：student(number,name,age)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number = new Element("number");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = new Element("name");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age = new Element("age");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document(root); //将根元素植入文档doc中</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number.setText("001");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name.setText("lnman");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age.setText("24");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; student.addContent(number);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; student.addContent(name);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; student.addContent(age);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.addContent(student);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Format format = Format.getCompactFormat();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.setEncoding("gb2312"); //设置xml文件的字符为gb2312</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.setIndent("&nbsp;&nbsp;&nbsp;&nbsp; "); //设置xml文件的缩进为4个空格</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMLOutputter XMLOut = new XMLOutputter(format);//元素后换行一层元素缩四格 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMLOut.output(doc, new FileOutputStream("studentinfo.xml"));&nbsp;&nbsp;</p>
<p>}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteXML w = new WriteXML();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Now we build an XML document .....");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w.BuildXML();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("finished!");</p>
<p>}</p>
<p>}</p>
<p>生成的xml文档为：</p>
<p>&lt;?xml version="1.0" encoding="gb2312"?&gt;</p>
<p>&lt;student-info&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;student&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;number&gt;001&lt;/number&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;lnman&lt;/name&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;age&gt;24&lt;/age&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/student&gt;</p>
<p>&lt;/student-info&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>创建XML文档2：</p>
<p>public class CreateXML {</p>
<p>&nbsp;&nbsp; public void Create() {</p>
<p>&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new Document();&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; ProcessingInstruction pi=new ProcessingInstruction("xml-stylesheet","type="text/xsl" href="test.xsl"");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; doc.addContent(pi);&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Namespace ns = Namespace.getNamespace("http://www.bromon.org" );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Namespace ns2 = Namespace.getNamespace("other", "http://www.w3c.org" );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Element root = new Element("根元素", ns);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; root.addNamespaceDeclaration(ns2);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; doc.setRootElement(root);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Element el1 = new Element("元素一");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; el1.setAttribute("属性", "属性一");&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Text text1=new Text("元素值");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element em = new Element("元素二").addContent("第二个元素");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; el1.addContent(text1);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; el1.addContent(em);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element el2 = new Element("元素三").addContent("第三个元素");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.addContent(el1);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.addContent(el2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //缩进四个空格,自动换行,gb2312编码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMLOutputter outputter = new XMLOutputter("&nbsp;&nbsp; ", true,"GB2312");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outputter.output(doc, new FileWriter("test.xml"));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e)&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CreateXML().Create();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>}</p>
<p>2、读取xml文档的例子：</p>
<p>import org.jdom.output.*;</p>
<p>import org.jdom.input.*;</p>
<p>import org.jdom.*;</p>
<p>import java.io.*;</p>
<p>import java.util.*;</p>
<p>public class ReadXML{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAXBuilder builder = new SAXBuilder();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document read_doc = builder.build("studentinfo.xml");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element stu = read_doc.getRootElement();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list = stu.getChildren("student");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0;i &lt; list.size();i++) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element e = (Element)list.get(i);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str_number = e.getChildText("number");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str_name = e.getChildText("name");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str_age = e.getChildText("age");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("---------STUDENT--------------");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("NUMBER:" + str_number);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("NAME:" + str_name);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("AGE:" + str_age);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("------------------------------");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>3、DTD验证的：</p>
<p>public class XMLWithDTD {</p>
<p>&nbsp;&nbsp; public void validate()&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; SAXBuilder builder = new SAXBuilder(true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; builder.setFeature("http://xml.org/sax/features/validation";,true); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Document doc = builder.build(new FileReader("author.xml"));&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("搞掂");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; XMLOutputter outputter = new XMLOutputter();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; outputter.output(doc, System.out);</p>
<p>&nbsp;&nbsp;&nbsp; }catch(Exception e) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e);</p>
<p>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp; public static void main(String args[]) {</p>
<p>&nbsp;&nbsp;&nbsp; new XMLWithDTD().validate();</p>
<p>&nbsp;&nbsp; }&nbsp;&nbsp;</p>
<p>}</p>
<p>　　需要说明的是，这个程序没有指明使用哪个DTD文件。DTD文件的位置是在XML中指定的，而且DTD不支持命名空间，一个XML只能引用一个DTD，所以程序直接读取XML中指定的DTD，程序本身不用指定。不过这样一来，好象就只能使用外部式的DTD引用方式了？高人指点。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>4、XML Schema验证的：</p>
<p>public class XMLWithSchema {</p>
<p>&nbsp;&nbsp; String xml="test.xml";</p>
<p>&nbsp;&nbsp; String schema="test-schema.xml";</p>
<p>&nbsp;&nbsp; public void validate() {</p>
<p>&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; SAXBuilder builder = new SAXBuilder(true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //指定约束方式为XML schema</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; builder.setFeature("http://apache.org/xml/features/validation/schema";,&nbsp;&nbsp; true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //导入schema文件</p>
<p>builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation";,schema); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Document doc = builder.build(new FileReader(xml));&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("搞掂");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; XMLOutputter outputter = new XMLOutputter();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; outputter.output(doc, System.out);</p>
<p>&nbsp;&nbsp;&nbsp; }catch(Exception e) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("验证失败:"+e);</p>
<p>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp; } </p>
<p>}</p>
<p>上面的程序就指出了要引入的XML Schema文件的位置。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>系统默认输出是UTF-8，这有可能导致出现乱码。</p>
<p>5、Xpath例子：</p>
<p>JDOM的关于XPATH的api在org.jdom.xpath这个包里。这个包下，有一个抽象类XPath.java和实现类JaxenXPath.java， 使用时先用XPath类的静态方法newInstance(String xpath)得到XPath对象，然后调用它的selectNodes(Object context)方法或selectSingleNode(Object context)方法，前者根据xpath语句返回一组节点(List对象)；后者根据一个xpath语句返回符合条件的第一个节点(Object类型)。请看jdom-1.0自带的范例程序： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它分析在web.xml文件中的注册的servlet的个数及参数个数，并输出角色名。 </p>
<p>web.xml文件： </p>
<p>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; </p>
<p>&lt;!-- </p>
<p>&lt;!DOCTYPE web-app </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"&gt; </p>
<p>--&gt; </p>
<p>&lt;web-app&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;snoop&lt;/servlet-name&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;SnoopServlet&lt;/servlet-class&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;file &lt;/servlet-name&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;ViewFile&lt;/servlet-class&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;initial&lt;/param-name&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;1000&lt;/param-value&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;The initial value for the counter&nbsp;&nbsp; &lt;!-- optional --&gt;&lt;/description&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;mv&lt;/servlet-name&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.wm&lt;/url-pattern&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;distributed/&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;security-role&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;manager&lt;/role-name&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;director&lt;/role-name&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;president&lt;/role-name&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/security-role&gt; </p>
<p>&lt;/web-app&gt; </p>
<p>处理程序： </p>
<p>import java.io.*; </p>
<p>import java.util.*;&nbsp;&nbsp;</p>
<p>public class XPathReader {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws IOException, JDOMException { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (args.length != 1) { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Usage: java XPathReader web.xml"); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String filename = args[0];//从命令行输入web.xml </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintStream out = System.out; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAXBuilder builder = new SAXBuilder(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = builder.build(new File(filename));//得到Document对象 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Print servlet information </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XPath servletPath = XPath.newInstance("//servlet");//,选择任意路径下servlet元素 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List servlets = servletPath.selectNodes(doc);//返回所有的servlet元素。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("This WAR has "+ servlets.size() +" registered servlets:"); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator i = servlets.iterator(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (i.hasNext()) {//输出servlet信息 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element servlet = (Element) i.next(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print("\t" + servlet.getChild("servlet-name") </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getTextTrim() + </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " for " + servlet.getChild("servlet-class") </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getTextTrim()); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List initParams = servlet.getChildren("init-param"); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(" (it has " + initParams.size() + " init params)");&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Print security role information </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XPath rolePath = XPath.newInstance("//security-role/role-name/text()"); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List roleNames = rolePath.selectNodes(doc);//得到所有的角色名 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (roleNames.size() == 0) { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("This WAR contains no roles"); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("This WAR contains " + roleNames.size() + " roles:"); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = roleNames.iterator(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (i.hasNext()) {//输出角色名 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("\t" + ((Text)i.next()).getTextTrim()); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>} </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>输出结果: </p>
<p>C:\java&gt;java&nbsp;&nbsp;&nbsp; XPathReader web.xml </p>
<p>This WAR has 2 registered servlets: </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; snoop for SnoopServlet (it has 0 init params) </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file for ViewFile (it has 1 init params) </p>
<p>This WAR contains 3 roles: </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; manager </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; director </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; president</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>6、数据输入要用到XML文档要通过org.jdom.input包，反过来需要org.jdom.output。如前面所说，关是看API文档就能够使用。 </p>
<p>我们的例子读入XML文件exampleA.xml，加入一条处理指令，修改第一本书的价格和作者，并添加一条属性，然后写入文件exampleB.xml： </p>
<p>//exampleA.xml </p>
<p>&lt;?xml version="1.0" encoding="GBK"?&gt; </p>
<p>&lt;bookList&gt; </p>
<p>&lt;book&gt; </p>
<p>&lt;name&gt;Java编程入门&lt;/name&gt; </p>
<p>&lt;author&gt;张三&lt;/author&gt; </p>
<p>&lt;publishDate&gt;2002-6-6&lt;/publishDate&gt; </p>
<p>&lt;price&gt;35.0&lt;/price&gt; </p>
<p>&lt;/book&gt; </p>
<p>&lt;book&gt; </p>
<p>&lt;name&gt;XML在Java中的应用&lt;/name&gt; </p>
<p>&lt;author&gt;李四&lt;/author&gt; </p>
<p>&lt;publishDate&gt;2002-9-16&lt;/publishDate&gt; </p>
<p>&lt;price&gt;92.0&lt;/price&gt; </p>
<p>&lt;/book&gt; </p>
<p>&lt;/bookList&gt; </p>
<p>//testJDOM.java </p>
<p>import org.jdom.*; </p>
<p>import org.jdom.output.*; </p>
<p>import org.jdom.input.*; </p>
<p>import java.io.*; </p>
<p>public class TestJDOM{ </p>
<p>public static void main(String args[])throws Exception{ </p>
<p>SAXBuilder sb = new SAXBuilder(); </p>
<p>//从文件构造一个Document，因为XML文件中已经指定了编码，所以这里不必了 </p>
<p>Document doc = sb.build(new FileInputStream("exampleA.xml")); </p>
<p>ProcessingInstruction pi = new ProcessingInstruction//加入一条处理指令 </p>
<p>("xml-stylesheet","href=\"bookList.html.xsl\" type=\"text/xsl\""); </p>
<p>doc.addContent(pi); </p>
<p>Element root = doc.getRootElement(); //得到根元素 </p>
<p>java.util.List books = root.getChildren(); //得到根元素所有子元素的集合 </p>
<p>Element book = (Element)books.get(0); //得到第一个book元素 </p>
<p>//为第一本书添加一条属性 </p>
<p>Attribute a = new Attribute("hot","true"); </p>
<p>book.setAttribute(a); </p>
<p>Element author = book.getChild("author"); //得到指定的字元素 </p>
<p>author.setText("王五"); //将作者改为王五 </p>
<p>//或 Text t = new Text("王五");book.addContent(t); </p>
<p>Element price = book.getChild("price"); //得到指定的字元素 </p>
<p>//修改价格，比较郁闷的是我们必须自己转换数据类型，而这正是JAXB的优势 </p>
<p>author.setText(Float.toString(50.0f)); </p>
<p>String indent = " "; </p>
<p>boolean newLines = true; </p>
<p>XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK"); </p>
<p>outp.output(doc, new FileOutputStream("exampleB.xml")); </p>
<p>} </p>
<p>}; </p>
<p>执行结果exampleB.xml： </p>
<p>&lt;?xml version="1.0" encoding="GBK"?&gt; </p>
<p>&lt;bookList&gt; </p>
<p>&lt;book hot=&#8221;true&#8221;&gt; </p>
<p>&lt;name&gt;Java编程入门&lt;/name&gt; </p>
<p>&lt;author&gt;50.0&lt;/author&gt; </p>
<p>&lt;publishDate&gt;2002-6-6&lt;/publishDate&gt; </p>
<p>&lt;price&gt;35.0&lt;/price&gt; </p>
<p>&lt;/book&gt; </p>
<p>&lt;book&gt; </p>
<p>&lt;name&gt;XML在Java中的应用&lt;/name&gt; </p>
<p>&lt;author&gt;李四&lt;/author&gt; </p>
<p>&lt;publishDate&gt;2002-9-16&lt;/publishDate&gt; </p>
<p>&lt;price&gt;92.0&lt;/price&gt; </p>
<p>&lt;/book&gt; </p>
<p>&lt;/bookList&gt; </p>
<p>&lt;?xml-stylesheet href="bookList.html.xsl" type="text/xsl"?&gt; </p>
<p>在默认情况下，JDOM的Element类的getText()这类的方法不会过滤空白字符，如果你需要过滤，用setTextTrim() 。</p>
</div>
<img src ="http://www.blogjava.net/goldstar/aggbug/305406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/goldstar/" target="_blank">天外流星</a> 2009-12-10 13:14 <a href="http://www.blogjava.net/goldstar/articles/305406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>