<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>OnJavaRoad</title>
    <description></description>
    <link>http://onjavaroad.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>今天老师出的一道UML习题</title>
        <author>OnJavaRoad</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://onjavaroad.javaeye.com">OnJavaRoad</a>&nbsp;
          链接：<a href="http://onjavaroad.javaeye.com/blog/193333" style="color:red;">http://onjavaroad.javaeye.com/blog/193333</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天老师出的一道令人头疼的UML习题，据说还是一道面试题，大家来讨论一下该怎么做。</p>
<p>原题是请画出&ldquo;我用电脑写一篇文章&rdquo;这句话的类关系？</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://onjavaroad.javaeye.com/blog/193333#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 16:43:45 +0800</pubDate>
        <link>http://onjavaroad.javaeye.com/blog/193333</link>
        <guid>http://onjavaroad.javaeye.com/blog/193333</guid>
      </item>
      <item>
        <title>XML学习之旅一 ——XML解析器</title>
        <author>OnJavaRoad</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://onjavaroad.javaeye.com">OnJavaRoad</a>&nbsp;
          链接：<a href="http://onjavaroad.javaeye.com/blog/192055" style="color:red;">http://onjavaroad.javaeye.com/blog/192055</a>&nbsp;
          发表时间: 2008年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为最近做一个考试系统项目的需要,开始学习XML.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XML在java中的使用越来越广泛，掌握几种常用的XML解析器十分有必要。目前XML主要的解器有DOM,SAX和JDOM.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOM是一套为合法的Well-Formed文件设计的API应用程序接口,它同时定义了这些文件的逻辑结构,访问和操作方法.由W3C制定,目标是提供一个可以通用于各种程序语言,操作系统和应用程序的API,所以DOM具有极高的兼容性.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAX(Simple Application interface for XML)是一个为基于事件XML解析器定义的,可以免费获得的,与平台语言无关的API,它允许程序和脚本动态的访问和更新文档的内容,结构和风格.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JDOM是两位著名的 Java 开发人员兼作者，Brett Mclaughlin 和 Jason Hunter 的创作成果，它是一个开源项目，它基于树型结构,利用纯Java的技术对XML文件实现解析,生成,序列化以及其他许多操作.JDOM直接为Java编程服务,它利用强有力的Java语言的诸多特性,把SAX和DOM的功能有效地结合起来,在使用设计上尽可能地隐藏原来使用过程中的复杂性.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于DOM和SAX在API中能直接找到，其中包含了三个软件包： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &middot;org.w3c.dom ，W3C 推荐的用于 XML 标准规划文档对象模型的 Java 工具&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&middot;org.xml.sax ，用于对 XML 进行语法分析的事件驱动的简单 API&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&middot;javax.xml.parsers ，工厂化工具，允许应用程序开发人员获得并配置特殊的语法分析器工具 JDOM 能够替换&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JDOM是一个开源项目，使用时需要导入jdom.jar到库中。相对于直接使用API中的解析器，JDOM使用起来要更简单得多。JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter开发出来，以弥补DOM及SAX在实际应用当中的不足之处。下面我们通过一个实际的例子，分别使用两种方式实现解析xml的试题文件来比较两者的不同。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本次需要解析的XML文件Item.xml<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&nbsp;&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #ff6600;">list</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #ff6600;">item id="1</span>"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">&lt;</span><span style="color: #ff6600;">answer</span>&gt;C&lt;/<span style="color: #ff0000;">answer</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&nbsp;&lt;</span><span style="color: #ff0000;">level</span>&gt;1&lt;/<span style="color: #ff0000;">level</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #ff0000;">question</span>&gt;在下列存储器中，访问速度最快的是:_______<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A) 硬盘存储器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B) 软盘存储器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C) 半导体RAM(内存储器)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D) 磁带存储器&lt;/<span style="color: #ff0000;">question</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">&lt;</span><span style="color: #ff0000;">questionType</span>&gt;基础题&lt;/q<span style="color: #ff0000;">uestionType</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&nbsp;&lt;/</span>i<span style="color: #ff0000;">tem</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&nbsp;&lt;</span><span style="color: #ff0000;">item id="2"&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&nbsp;&lt;</span><span style="color: #ff0000;">answer</span>&gt;D&lt;/<span style="color: #ff0000;">answer</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #ff0000;">leve</span>l&gt;1&lt;/<span style="color: #ff0000;">level</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #ff0000;">question</span>&gt;下面是关于微型计算机操作的四条叙述，其中正确的一条是:_______<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A)系统不会用输入日期做任何事，可以随便输入过去一个日期作当天日期<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B) 用户每键入一个字符时，DOS就立即将其读取并识别之<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C) 启动DOS系统时，如不想输入新时间，用户只按下任意键就行<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D)软盘可以在切断电源之前取出来，也可以在切断电源之后取出来&lt;/<span style="color: #ff0000;">question</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&lt;</span>q<span style="color: #ff0000;">uestionType</span>&gt;基础题&lt;/<span style="color: #ff0000;">questionType</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&nbsp;&lt;/</span><span style="color: #ff0000;">item&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">&lt;</span>/list&gt;<br /><br />&nbsp;同过使用DOM和SAX对Item.xml进行解析DomExample.java<br />&nbsp;</p>
<pre name="code" class="java">package action;

 /**
 *
 * @author weiqishaonian
 */
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
//下面主要是org.xml.sax包的类
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomExample {

    private Document doc;
    private InputStream is = null;

    public DomExample(String xmlFilePath) {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//(1)得到DOM解析器的工厂实例
            DocumentBuilder db = dbf.newDocumentBuilder();//(2)从DOM工厂获得DOM解析器
            is = new FileInputStream(xmlFilePath);//(3)把要解析的XML文档转化为输入流，以便DOM解析器解析它
            doc = db.parse(is);//(4)解析XML文档的输入流，得到一个Document
            Element emt = doc.getDocumentElement();//(5)得到XML文档的根节点
            NodeList list = emt.getChildNodes();//(6)得到节点的子节点
            if (list != null) {
                for (int i = 0; i &lt; list.getLength(); i++) {
                    Node item = list.item(i);
                    if (item.getNodeType() == Node.ELEMENT_NODE) {
                        //(7)取得节点的属性值
                        String id = item.getAttributes().getNamedItem("id").getNodeValue();
                        System.out.println(id);
                        //(8)轮循子节点
                        for (Node node = item.getFirstChild(); node != null; node = node.getNextSibling()) {
                            if (node.getNodeType() == Node.ELEMENT_NODE) {
                                if (node.getNodeName().equals("answer")) {
                                    String answer = node.getFirstChild().getNodeValue();//得到试题答案
                                    System.out.println(answer);
                                }
                                if (node.getNodeName().equals("level")) {
                                    String level = node.getFirstChild().getNodeValue();//得到试题等级
                                    System.out.println(level);
                                }
                                if (node.getNodeName().equals("question")) {
                                    String question = node.getFirstChild().getNodeValue();//得到试题
                                    System.out.println(question);
                                }
                                if (node.getNodeName().equals("questionType")) {
                                    String questionType = node.getFirstChild().getNodeValue();//得到试题类型
                                    System.out.println(questionType);
                                }
                            }
                        }
                    }
                }
            }
            is.close();
        } catch (SAXException ex) {
            Logger.getLogger(ItemXMLParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ItemXMLParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(ItemXMLParser.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        System.out.println("===========================================");
        new DomExample("D:/item.xml");
        System.out.println("===========================================");
    }

}

</pre>
<p>&nbsp;运行结果：<br />run-single:<br />===========================================<br />1<br />C<br />1<br />在下列存储器中，访问速度最快的是:_______<br />&nbsp;&nbsp; A) 硬盘存储器<br />&nbsp;&nbsp; B) 软盘存储器<br />&nbsp;&nbsp; C) 半导体RAM(内存储器)<br />&nbsp;&nbsp; D) 磁带存储器<br />基础题<br />2<br />D<br />1<br />下面是关于微型计算机操作的四条叙述，其中正确的一条是:_______<br />&nbsp;&nbsp; A)系统不会用输入日期做任何事，可以随便输入过去一个日期作当天日期<br />&nbsp;&nbsp; B) 用户每键入一个字符时，DOS就立即将其读取并识别之<br />&nbsp;&nbsp; C) 启动DOS系统时，如不想输入新时间，用户只按下任意键就行<br />&nbsp;&nbsp; D)软盘可以在切断电源之前取出来，也可以在切断电源之后取出来<br />基础题<br />===========================================<br />BUILD SUCCESSFUL (total time: 0 seconds)<br /><br />同过使用JDOM对Item.xml进行解析JDomExample.java</p>
<pre name="code" class="java">package action;

/**
 *
 * @author weiqishaonian
 */
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class JDomExample {

    public JDomExample(String xmlFilePath) {
        try {
            SAXBuilder sb = new SAXBuilder();//
            Document doc = sb.build(new FileInputStream(xmlFilePath));
            Element root = doc.getRootElement(); //得到根元素
            List items = root.getChildren(); //得到根元素所有子元素的集合
            for (int i = 0; i &lt; items.size(); i++) {
                Element item = (Element) items.get(i); //得到第i个item元素
                System.out.println(item.getAttribute("id").toString());
                Element answer = item.getChild("answer"); //得到试题答案
                System.out.println(answer.getText());
                Element level = item.getChild("level"); //得到试题等级
                System.out.println(level.getText());
                Element question = item.getChild("question"); //得到试题
                System.out.println(question.getText());
                Element questionType = item.getChild("questionType"); //得到试题类型
                System.out.println(questionType.getText());
            }
        } catch (JDOMException ex) {
            Logger.getLogger(JDomExample.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(JDomExample.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        System.out.println("===========================================");
        new JDomExample("D:/item.xml");
        System.out.println("===========================================");
    }
}

</pre>
<p>&nbsp;运行结果：<br />run-single:<br />===========================================<br />[Attribute: id="1"]<br />C<br />1<br />在下列存储器中，访问速度最快的是:_______<br />&nbsp;&nbsp; A) 硬盘存储器<br />&nbsp;&nbsp; B) 软盘存储器<br />&nbsp;&nbsp; C) 半导体RAM(内存储器)<br />&nbsp;&nbsp; D) 磁带存储器<br />基础题<br />[Attribute: id="2"]<br />D<br />1<br />下面是关于微型计算机操作的四条叙述，其中正确的一条是:_______<br />&nbsp;&nbsp; A)系统不会用输入日期做任何事，可以随便输入过去一个日期作当天日期<br />&nbsp;&nbsp; B) 用户每键入一个字符时，DOS就立即将其读取并识别之<br />&nbsp;&nbsp; C) 启动DOS系统时，如不想输入新时间，用户只按下任意键就行<br />&nbsp;&nbsp; D)软盘可以在切断电源之前取出来，也可以在切断电源之后取出来<br />基础题<br />===========================================<br />BUILD SUCCESSFUL (total time: 0 seconds)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过上面两个文件比较，我们可以明显的看出区别。JDOM解析要比使用DOM和SAX进行解析使用起来更简单，完成同样的功能用JDOM比使用DOM和SAX要少很多代码（请看DomExample.java和JDomExample.java文件），而且使用JDOM的代码看起来更为清晰。JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性（方法重载、集合概念以及映射），把SAX和DOM的功能有效地结合起来。 Jdom是用Java语言读、写、操作XML的新API函数。Jason Hunter 和 Brett McLaughlin公开发布了它的1.0版本。在直觉、简单和高效的前提下，这些API函数被最大限度的优化。在接下来的篇幅里将介绍怎么用Jdom去读写一个已经存在的XML文档。在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。</p>
<p><br />&nbsp;[想要了解更多关于JDOM朋友，可以访问下列网站]</p>
<h1><span style="font-size: small; font-family: 黑体;">JDOM&nbsp; </span><a href="http://www.itisedu.com/phrase/200604181210165.html"><span style="font-size: small; font-family: 黑体;">http://www.itisedu.com/phrase/200604181210165.html</span></a></h1>
<h4>用 JDOM 简化 XML 编程 <a href="http://www.360doc.com/showWeb/0/0/95679.aspx" target="_blank">http://www.360doc.com/showWeb/0/0/95679.aspx</a></h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://onjavaroad.javaeye.com/blog/192055#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 02 May 2008 01:41:00 +0800</pubDate>
        <link>http://onjavaroad.javaeye.com/blog/192055</link>
        <guid>http://onjavaroad.javaeye.com/blog/192055</guid>
      </item>
  </channel>
</rss>