永发信息网

关于用jdom读取xml

答案:2  悬赏:0  手机版
解决时间 2021-07-20 05:03
我现在要做一个选课系统, 想用xml文件做配置文件,用jdom读取,,就是有一个总的servlet截取所有*.do请求,然后读取xml文件,然后匹配a.do..还是b.do的请求.然后分发到不同servlet处理...请问这样可行吗?效率怎样??
最佳答案

这个功能相当于Struts框架的核心功能了,效率方面,如果仅是实现你的需求,是非常高的,JDOM在读取XML文档时是一次性地Load进内存,读取速度非常快,在系统启动初始化时就应该把XML配置文档预先加载进内存了。


几个月前我已经实现了一个这样的MVC开发框架,你想要的内容都有涉及到时,我正是用JDOM来读取XML配置文档的,有一个负责转发控制的Servlet来处理请求有转发,请看我的博客: http://gzhzh.javaeye.com/blog/437177


我还献出了所有源代码、使用例子的工程,你去下载源码吧,你想知道的都可以在里面找到答案。

全部回答
Jdom是用Java语言读、写、操作XML的新API函数。Jason Hunter 和 Brett McLaughlin公开发布了它的1.0版本。在直觉、简单和高效的前提下,这些API函数被最大限度的优化。在接下来的篇幅里将介绍怎么用Jdom去读写一个已经存在的XML文档。 关键词:Java、JDOM、XML java+xml=Jdom! 这就是Jdom设计者的目标。如果你曾经是用过烦人的SAX或Dom来处理xml,你就会知道为什么要有JDOM.在2002的javaOne会议上JDOM的主要创始人jason Hunter有一篇精彩的演讲介绍了JDom技术,土模就是jdom makes xml easy. 我们知道dom是用于与平台和语言无关的方式表示xml文档的官方W3C标准,利用dom和sax api可以解析和处理 xml文档。这里我们介绍的jdom是基于树操作的纯java api,应该说他提供的是一套用于解析、创建、出来和实现xml的解决方案。 二、环境配置 在我的WINDOWS xp系统平台上采用jdk-1_5_0_06作为开发和测试平台。 三、获得与安装JDOM 由于目前JDOM并没有包含在SUN的JDK中(我想不久的将来JDOM必然会成为SUN JDK的一部分),我们必须手工下载与设置JDOM的环境。 在 http://www.jdom.org可以下载JDOM的最新版本。这里下载的是jdom-1.0。JDOM的jar文件就是build目录下的文件jdom.jar,将上述文件拷贝到jdk-1_5_0_06目录下的jre/lib/ext目录下,而用eclipse的用户可以手动添加到user liberary Jdom模型: 每个元素都有四个关键段: 1、名称 2、元素属性 3、元素范围名字空间 4、元素内容 用JDOM处理现有XML文档的大致过程如下: 1、用简单无变元构造函数构造一个org.jdom.input.SAXBuilder对象。SAXBuilder用sax解析器从文件中构造文档。SAXBuilder侦听sax事件并从内存中建立一个相应的文档。这种方式非常快(基本上和sax一样快),Jdom的速度有值得期待的提高的潜力通过一个延期的构造器的完成。这个构造器检查XML数据源,但当请求的时候才对它解析。例如:文档的属性当不访问时是不需要解析的.构造器仍在发展,可以通sql查询、ldap查询和其他的数据格式来够造Jdom文档。所以,一旦进到内存中,文档就和建造它的工具没有关系了。 2、用建立器的build()方法从Reader,InputStream,URL,File或包含系统ID的字符串建立Document对象。 3、如果读取文档遇到问题,则抛出IOException,如果建立文档遇到问题,则抛出JDOMException。 4、否则用Document类,Element类和其他JDOM类的方法在文档中建立导航。 导航JDOM树 每个Element对象包含一列子元素:Comment,ProcessingInstruction,Text和其他Element对象。此外,属性和其他名字空间还有单独的列表。 分析文档和建立Document对象之后,可能要通过搜索来选择其中程序感兴趣的部分。在JDOM中,大多数导航通过Element类的方法进行。每个Element的完整子元素(包括了子元素的所有内容,包括说明、处理指令、文本节点和元素,要进行深度搜索,就要对当前元素的子元素应用getContent()方法,通常要采用递归)在getContent()方法返回java.util.List中提供。getChildren()方法返回的java.util.List中只有每个Element的子元素。 JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的,你不必担心处理速度和内存的问题。另外,JDOM中几乎没有接口,的类全部是实实在在的类,没有类工厂类的。其最重要的一个包org.jdom中主要有以下类: Document(文档节点) 每个Document对象包括下列三个属性: 1、根Element 2、表示文档类型声明的DocType对象 3、包含根元素和任何处理指令与说明的List,按文档顺序出现 Attribute(属性节点) Public Element setAttributes (List attributes)Throws IllegalAddException Public List getAttributes() setAttribute() getAttribute() getAttributeValue() attribute.getName() attribute.getValue() CDATA (CDATA段节点) Comment(说明节点) XML文件的说明:<!-- wire configuration --> DocType (文档类型节点) Element(元素节点) 元素名设置和获取 Public Element setName(String name) throws IllegalNameException Public String getName() Public String get(int i) //i>=0 Content(内容节点) Public Element setContent(List list) throws IllegalAddException; public List getContent(); addContent(); removeContent(); EntityRef(实例节点) Namespace(名字空间节点) ProcessingInstruction(处理指令节点) Text(文本节点) getText(); setText(String *); **ample.xml文件 <?xml version="1.0" encoding="GBK"?> <bookList> <book> <name>Java编程入门</name> <author>张三</author> <publishDate>2002-6-6</publishDate> <price>35.0</price> </book> <book> <name>XML在Java中的应用</name> <author>李四</author> <publishDate>2002-9-16</publishDate> <price>92.0</price> </book> </bookList> cute.xml文件 <?xml version="1.0" encoding="utf-8"?> //UTF8字符编码格式是所有XML文档默认的编码格式 <bookList> //RootElement <book hot="true"> //<childelement name="value">---->Attribute <name>Java编程入门</name> //<element>This is my text content</element> <author>cute</author> <publishDate>2002-6-6</publishDate> <price>50.0</price> </book> <book> <name>XML在Java中的应用</name> <author>李四</author> <publishDate>2002-9-16</publishDate> <price>92.0</price> </book> </bookList> 数据输入要用到XML文档要通过org.jdom.input包,反过来需要org.jdom.output。如前面所说,关是看API文档就能够使用。 我们的例子读入XML文件example.xml,加入一条处理指令,修改第一本书的价格和作者,并添加一条属性,然后写入文件cute.xml cute.java: package jdom; import org.jdom.*; import org.jdom.input.*; import org.jdom.output.*; import java.io.*; import java.util.*; public class Cute { public static void main(String args[]) { try { SAXBuilder sb = new SAXBuilder(); // 创建文档 Document doc = sb.build(new FileInputStream("example.xml")); // 加入一条处理指令 ProcessingInstruction pi = new ProcessingInstruction( "xml-stylesheet", "href=\"bookList.html.xsl\" type=\"text/xsl\""); // 把这条处理指令,加入文档中 doc.addContent(pi); // 获得这个文档的根元素 Element el = doc.getRootElement(); // 获得这个根元素的所有子元素(不包含子元素的子元素),却完全忽略其内容 List ls = el.getContent(); Iterator i = ls.iterator(); while (i.hasNext()) { Object o = i.next(); if (o instanceof Text) {Text t=(Text)o; System.out.println("Text: " + t.getText());} else if(o instanceof Attribute) System.out.println("Attribute: " + o); else if (o instanceof Element) System.out.println("Element: " + ((Element) o).getName()); } // 得到第一个子元素的子元素,却完全忽略其内容 Element book = (Element) ls.get(0); // 给这个子元素添加一条属性, Attribute attr = new Attribute("hot", "true"); book.setAttribute(attr); // 获得这个元素的子元素(指定)以及其值 Element el2 = book.getChild("author"); // 输出这个元素的值 System.out.println(el2.getName()); // 给这个元素的值改个名字 el2.setText("cute"); // 再获得这个元素的子元素(指定) Element el3 = book.getChild("price"); // 给这个值换个值 el3.setText(Float.toString(50.0f)); XMLOutputter xml = new XMLOutputter(); xml.output(doc, new FileOutputStream("cute.xml")); } catch (Exception e) { System.out.println(e.getMessage()); } } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
花王仙女什么时候有在电视剧台播
我的笔记本电脑,起动时到了Logo就没反应了 ,
语文作业题 求答案 越快越好
怎么样才可以让自己不在意一切~??
XBOX360机器人大战怎么捕获
清远龙塘电子垃圾拆解业的工资有多少
贵州从江县丙妹镇的小学现在怎样了?
开通黄钻的最佳方法是什么
大班毕业园长寄语梦想,求梦想寄语 急急急
老挝丰沙里的电话区号是多少?
你不知道这句歌词是那首歌
手机QQ2008聊天记录怎么转到QQ2009?
转成鬼泣有没有新的主动技能可以学习,那些被
我愛你我愛你求一首歌.我只知道这句:我爱你你
紫砖有什么用
推荐资讯
学电脑维修好还是学广告设计之类的有前途
被誉为“钢琴之王”的作曲家是谁
谁有win7系统?
怀孕喝酒会怎样
手机的数据线接上两个USB插头,用同时用两个插
为什么明明在一起,却没有任何语言,心却隔了
上课老想她 分神了怎么办?
北京科达、北京申克、北京维昊的试验仪器质量
我爱看动漫,有的大人就以为我长不大,智力低
天龙八部帮派多给的双倍时间在哪领取?
骚+浪+性点的QQ玄武名字
我的网名“別跑ヾ殠吖頭”来个和网名匹配的个
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?