`

Digerster类的API

阅读更多
参考网站:http://blog.csdn.net/fulianglove/archive/2008/07/09/2627472.aspx
01.<!--********* foo.xml文件的内容 *************--> 
02. 
03. 
04. 
05.<foo-catgory> 
06. 
07.<foo name="foo1" count="10"> 
08. 
09.<bar id="1" title="The First Child"/> 
10. 
11.<bar id="2" title="The Second Child"/> 
12. 
13.</foo> 
14. 
15. 
16. 
17.<foo name="foo2" count="20"> 
18. 
19.<bar id="3" title="foo2 The First Child"/> 
20. 
21.<bar id="4" title="f002 The Second Child"/> 
22. 
23.</foo> 
24. 
25.</foo-catgory> 
<!--********* foo.xml文件的内容 *************-->



<foo-catgory>

<foo name="foo1" count="10">

<bar id="1" title="The First Child"/>

<bar id="2" title="The Second Child"/>

</foo>



<foo name="foo2" count="20">

<bar id="3" title="foo2 The First Child"/>

<bar id="4" title="f002 The Second Child"/>

</foo>

</foo-catgory>view plaincopy to clipboardprint?
01.////**********************class Bar ****************  
02. 
03.package mypackage;  
04. 
05. 
06. 
07./**  
08. 
09.* <p>Titleigester类的api进行xml解析的简单例子 </p>  
10. 
11.*  
12. 
13.* <p>Description:对应于xml中的<foo-catgory>下的<foo>下<bar>元素 </p>  
14. 
15.*  
16. 
17.* <p>Copyright: Copyright (c) 2005</p>  
18. 
19.*  
20. 
21.* <p>Company: </p>  
22. 
23.*  
24. 
25.* @author [email]wdz123@hotmail.com[/email]  
26. 
27.* @version 1.0 
28. 
29.*/  
30. 
31.public class Bar {  
32. 
33.private int id;  
34. 
35.private String title;  
36. 
37.public int getId() {  
38. 
39.return id;  
40. 
41.}  
42. 
43.public void setId(int id) {  
44. 
45.this.id = id;  
46. 
47.}  
48. 
49.public String getTitle() {  
50. 
51.return title;  
52. 
53.}  
54. 
55.public void setTitle(String title) {  
56. 
57.this.title = title;  
58. 
59.}  
60. 
61.private void prints(String s) {  
62. 
63.System.out.println(" " + s);  
64. 
65.}  
66. 
67.public void print(String s) {  
68. 
69.prints(s + "---Bar.id=" + id + ",Bar.title=" + title);  
70. 
71.}  
72. 
73.} 
////**********************class Bar ****************

package mypackage;



/**

* <p>Titleigester类的api进行xml解析的简单例子 </p>

*

* <p>Description:对应于xml中的<foo-catgory>下的<foo>下<bar>元素 </p>

*

* <p>Copyright: Copyright (c) 2005</p>

*

* <p>Company: </p>

*

* @author [email]wdz123@hotmail.com[/email]

* @version 1.0

*/

public class Bar {

private int id;

private String title;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

private void prints(String s) {

System.out.println(" " + s);

}

public void print(String s) {

prints(s + "---Bar.id=" + id + ",Bar.title=" + title);

}

}view plaincopy to clipboardprint?
01.//****** * class Foo 的代码 ************  
02. 
03. 
04. 
05.package mypackage;  
06. 
07. 
08. 
09.import java.util.*;  
10. 
11. 
12. 
13./**  
14. 
15.* <p>Titleigester类的api进行xml解析的简单例子 </p>  
16. 
17.*  
18. 
19.* <p>Description:对应于xml中的<foo-catgory>下的<foo>元素 </p>  
20. 
21.*  
22. 
23.* <p>Copyright: Copyright (c) 2005</p>  
24. 
25.*  
26. 
27.* <p>Company: </p>  
28. 
29.*  
30. 
31.* @author [email]wdz123@hotmail.com[/email]  
32. 
33.* @version 1.0 
34. 
35.*/  
36. 
37.public class Foo {  
38. 
39.private HashMap list;  
40. 
41.private String name;  
42. 
43.private int count;  
44. 
45.public void addBar(Bar bar) {  
46. 
47.list.put(new Integer(bar.getId()), bar);  
48. 
49.}  
50. 
51. 
52. 
53.public Bar findBar(int id) {  
54. 
55.return (Bar) (list.get(new Integer(id)));  
56. 
57.}  
58. 
59.public Iterator getBars() {  
60. 
61.return 
62. 
63.list.keySet().iterator();  
64. 
65.}  
66. 
67.public String getName() {  
68. 
69.return name;  
70. 
71.}  
72. 
73.public int getCount() {  
74. 
75.return count;  
76. 
77.}  
78. 
79.public void setName(String n) {  
80. 
81.this.name = n;  
82. 
83.}  
84. 
85.public void setCount(int count) {  
86. 
87.this.count = count;  
88. 
89.}  
90. 
91.public Foo() {  
92. 
93.super();  
94. 
95.list = new HashMap();  
96. 
97.}  
98. 
99. 
100. 
101.public void print(){  
102. 
103.Iterator i = getBars();  
104. 
105.Bar b;  
106. 
107.int c = 0;  
108. 
109.while (i.hasNext()) {  
110. 
111.Integer ii = (Integer) i.next();  
112. 
113.b = findBar(ii.intValue());   
114. 
115.b.print(" Bar" + c++ +"---");  
116. 
117.}  
118. 
119.}  
120. 
121.}  
122.<PRE class=java name="code">///*******************class FooCatgory 的代码 **************  
123. 
124.package mypackage;  
125. 
126. 
127. 
128.import java.util.LinkedList;  
129. 
130.import java.util.Iterator;  
131. 
132. 
133. 
134./**  
135. 
136.* <p>Title: Digester类的api进行xml解析的简单例子</p>  
137. 
138.*  
139. 
140.* <p>Description: :对应于xml文件中的<foo-catgory>元素 </p>  
141. 
142.*  
143. 
144.* <p>Copyright: Copyright (c) 2005</p>  
145. 
146.*  
147. 
148.* <p>Company: </p>  
149. 
150.*  
151. 
152.* @author [email]wdz123@hotmail.com[/email]  
153. 
154.* @version 1.0 
155. 
156.*/  
157. 
158.public class FooCatgory {  
159. 
160.LinkedList list = new LinkedList();  
161. 
162. 
163. 
164.public void addFoo(Foo p) {  
165. 
166.list.addLast(p);  
167. 
168.}  
169. 
170.private void prints(String s) {  
171. 
172.System.out.println(" " + s);  
173. 
174.}  
175. 
176. 
177. 
178.public void print() {  
179. 
180.prints("FooCatgory has " + list.size() + " elements");  
181. 
182.int c = 0; //  
183. 
184.Foo f;  
185. 
186.for (Iterator i = list.iterator(); i.hasNext(); ) {  
187. 
188.f = (Foo) i.next();  
189. 
190.prints(" Foo" + c++ +"---" + "Foo.name=" + f.getName() + ",Foo.count=" +  
191. 
192.f.getCount());  
193. 
194.f.print();  
195. 
196.}  
197. 
198.}  
199. 
200.}</PRE>  
201.<PRE class=java name="code"><PRE class=java name="code">*********** class ParseXmlFile 的代码 *******************  
202. 
203. 
204. 
205.package mypackage;  
206. 
207. 
208. 
209.import org.apache.commons.digester.*;  
210. 
211. 
212. 
213./** 
214.
215.* <p>Titleigester类的api进行xml解析的简单例子 </p> 
216.
217.* 
218.
219.* <p>Description: 使用Digester的api方法进行具体的解析xml文件,得到相应的java对象</p> 
220.
221.* 
222.
223.* <p>Copyright: Copyright (c) 2005</p> 
224.
225.* 
226.
227.* <p>Company: </p> 
228.
229.* 
230.
231.* @author [email]wdz123@hotmail.com[/email] 
232.
233.* @version 1.0 
234.
235.*/ 
236. 
237.public class ParseXmlFile {  
238. 
239.public ParseXmlFile() {  
240. 
241.super();  
242. 
243.}  
244. 
245. 
246. 
247.private void parse(String sFileName) {  
248. 
249.Digester d = new Digester();  
250. 
251.//不进行XML与相应的DTD的合法性验证,如果设置=true,那应该有对应的dtd文件,并且在xml文件指出使用的dtd文件  
252. 
253.//digester.setValidating(false); //   
254. 
255. 
256. 
257.//创建根对象  
258. 
259.FooCatgory fooCatgory = new FooCatgory();   
260. 
261. 
262. 
263.//根对象进入对象栈(入栈,成为栈顶元素)   
264. 
265.d.push(fooCatgory);   
266. 
267. 
268. 
269.// 当遇到<foo>时创建一个mypackage.Foo对象,并且进入对象栈(入栈,成为栈顶元素)  
270. 
271.d.addObjectCreate("foo-catgory/foo", mypackage.Foo.class);   
272. 
273. 
274. 
275.// 根据<foo>元素的属性(attribute),对刚才创建的Foo对象的属性(property)进行设置  
276. 
277.d.addSetProperties("foo-catgory/foo");   
278. 
279. 
280. 
281.//当再次遇到<foo>的子元素<bar>时创建一个mypackage.Bar对象,并将其放在栈顶,同时父元素(fooCatgory对象)的addFoo方法。   
282. 
283.d.addSetNext("foo-catgory/foo", "addFoo");   
284. 
285. 
286. 
287.// 当遇到<bar>时创建一个mypackage.Bar对象,并将其放在栈顶(入栈,成为栈顶元素)   
288. 
289.d.addObjectCreate("foo-catgory/foo/bar", mypackage.Bar.class);   
290. 
291. 
292. 
293.// 根据<bar>元素的属性(attribute),对刚创建的Bar对象的属性(property)进行设置   
294. 
295.d.addSetProperties("foo-catgory/foo/bar");   
296. 
297. 
298. 
299.//当再次遇到<bar>时创建一个mypackage.Bar对象,并将其放在栈顶,同时调用父元素(Foo对象)的addBar方法。   
300. 
301.d.addSetNext("foo-catgory/foo/bar", "addBar", "mypackage.Bar");  
302. 
303. 
304. 
305.try {  
306. 
307.//开始解析Xml-- foo.xml 该文件必须放到project根目录下,和目录src同级目录   
308. 
309.d.parse(sFileName);   
310. 
311.}  
312. 
313.catch (java.io.IOException ioe) {  
314. 
315.System.out.println("IOException reading input file:" + ioe.getMessage());  
316. 
317.System.exit( -1);  
318. 
319.}  
320. 
321.catch (org.xml.sax.SAXException se) {  
322. 
323.System.out.println("SAXException Error parsing input file:" +  
324. 
325.se.getMessage());  
326. 
327.System.exit( -1);  
328. 
329.}  
330. 
331.catch (Exception ex) {  
332. 
333.System.out.println("Exception parse error!" + ex.getMessage());  
334. 
335.}  
336. 
337. 
338. 
339.//打印xml文件解析的结果  
340. 
341.fooCatgory.print();  
342. 
343.}  
344. 
345. 
346. 
347.public static void main(String[] args) {  
348. 
349.ParseXmlFile p = new ParseXmlFile();  
350. 
351.p.parse("foo.xml");  
352. 
353.}  
354. 
355.}</PRE>  
356.</PRE> 
分享到:
评论

相关推荐

    网络编程Netty框架深度解析:NIO核心技术、线程模型与高性能网络应用设计

    内容概要:本文档详细介绍了Netty框架的核心概念、特点、线程模型、序列化协议选择及其实现细节。首先对比了BIO、NIO和AIO的区别,重点阐述了NIO的非阻塞特性及其基于事件驱动的工作原理。接着深入讲解了Netty的高性能表现,包括零拷贝技术、心跳机制、内存管理、流量整形等方面。文档还探讨了Netty的线程模型,包括单线程、多线程和主从多线程模型,并解释了NIOEventLoopGroup的源码实现。此外,文档讨论了TCP粘包/拆包问题及其解决方案,以及常见的序列化协议(如JSON、Protobuf、Thrift等)的特点和适用场景。 适合人群:具备一定网络编程基础,特别是对Java NIO和Netty框架有一定了解的研发人员和技术专家。 使用场景及目标:①理解NIO与传统BIO的区别,掌握NIO的非阻塞特性和事件驱动模型;②深入了解Netty的高性能设计原则,包括零拷贝、心跳检测、内存管理和线程模型;③掌握TCP粘包/拆包的原理及解决方案;④根据具体应用场景选择合适的序列化协议。 阅读建议:本文档内容较为深入,建议读者在阅读过程中结合实际代码和应用场景进行理解。对于Netty的线程模型和序列化协议部分,可以通过实际编程练习加深理解。特别地,理解NIOEventLoopGroup的源码实现需要有一定的Java多线程编程基础。

    美高森美提供的SmartFusion2 SoC FPGA双轴电机控制套件带有模块化电机控制IP集和参考设计.doc

    美高森美提供的SmartFusion2 SoC FPGA双轴电机控制套件带有模块化电机控制IP集和参考设计.doc

    基于三菱FX1S PLC和威纶通触摸屏的双伺服打孔机控制系统开发详解

    内容概要:本文详细介绍了使用三菱FX1S系列PLC和威纶通触摸屏构建双伺服打孔机控制系统的开发过程。主要内容涵盖系统架构、PLC程序设计、触摸屏配置以及开发中常见的注意事项。系统的核心在于通过PLC控制伺服电机完成精确的打孔动作,触摸屏则用于参数设置和运行监控。文中还讨论了伺服电机的参数配置、循环控制逻辑、MODBUS通信配置、界面设计及实时数据更新等方面的内容。此外,作者分享了一些实际开发中的经验和教训,如伺服电机的过冲和欠冲问题、程序稳定性的保障措施以及触摸屏响应速度的优化。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是对PLC编程和伺服控制有一定基础的人群。 使用场景及目标:适用于需要高精度定位和控制的工业应用场景,如钣金加工车间。目标是帮助读者掌握双伺服打孔机的开发流程,提高系统的稳定性和效率。 其他说明:文中提到的技术细节和实践经验对于理解和解决类似项目的难题非常有帮助。建议读者在实践中结合具体情况进行调整和优化。

    太远市-小店区-街道行政区划_140105_Shp数据-wgs84坐标系 (1).rar

    街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用

    乌兰察布市-乌兰察布市-街道行政区划_150900_Shp数据-wgs84坐标系.rar

    街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用

    呼伦贝尔市-满洲里市-街道行政区划_150781_Shp数据-wgs84坐标系.rar

    呼伦贝尔市-满洲里市-街道行政区划_150781_Shp数据-wgs84坐标系.rar

    临汾市-尧都区-街道行政区划_141002_Shp数据-wgs84坐标系.rar

    街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用

    Java基于springboot+vue的资产管理系统源码+数据库(高分项目)

    Java基于springboot+vue的资产管理系统源码+数据库(高分项目),个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。 Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据库(高分项目)Java基于springboot+vue的资产管理系统源码+数据

    吕梁市-吕梁市-街道行政区划_141100_Shp数据-wgs84坐标系.rar

    街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用

    邢台市-巨鹿县--街道行政区划_130529_Shp-wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    石家庄市-石家庄市-石家庄市-石家庄市-街道行政区划_130100_Shp数据wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    北京市-昌平区-街道行政区_110114_shp-wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接使用。

    朔州市-朔城区-街道行政区划_140602_Shp数据-wgs84坐标系.rar

    街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用

    石家庄市-石家庄市-石家庄市-行唐县-街道行政区划_130125_Shp数据wgs84坐标系.rar

    街道级行政区划shp数据,wgs84坐标系,直接下载使用。

    鄂尔多斯市-乌审旗-街道行政区划_150626_Shp数据-wgs84坐标系.rar

    鄂尔多斯市-乌审旗-街道行政区划_150626_Shp数据-wgs84坐标系.rar

    Thinkphp蓝色大气的响应式轻量级通用后台,采用Bootstrap3制作,自带权限管理功能

    适用范围:Thinkphp蓝色响应式后台源码 系统设置、导航管理、配置管理、上传管理、用户管理、功能模块和插件管理 源码开发语言:PHP+MYSQL 源码描述说明: thinkphp蓝色大气的响应式后台模板,常用的后台功能有:系统设置、导航管理、配置管理、上传管理、用户管理、功能模块和插件管理等。

    大同市-云冈区-街道行政区划_140214_Shp数据-wgs84坐标系.rar

    大同市-云冈区-街道行政区划_140214_Shp数据-wgs84坐标系.rar

    脑机接口基于FBCCA算法与贝叶斯优化的SSVEP分类器设计及优化:含高斯过程优化完整代码实现与性能分析如何在FBCCA

    内容概要:本文详细介绍了在FBCCA算法中应用贝叶斯优化的完整代码实现,基于高斯过程优化,代码可直接运行。首先配置环境,安装所需的Python库如scikit-optimize、scipy、numpy、torch等。核心实现部分包括数据生成模块,通过SSVEPGenerator类生成带谐波的SSVEP信号FBCCABayes分类器模块,定义了滤波器组的动态创建、CCA相关系数的计算,并实现了贝叶斯优化过程。最后,通过贝叶斯优化执行模块,对FBCCABayes分类器的关键参数(滤波器阶数、频带宽度、CCA权重系数)进行优化,输出最佳参数组合及最高验证准确率,并对优化过程进行可视化展示,包括收敛曲线和参数影响热力图。 适合人群:有一定机器学习基础,特别是熟悉Python编程和贝叶斯优化理论的研究人员或工程师。 使用场景及目标:①理解FBCCA算法的工作原理及其在脑机接口领域的应用;②掌握贝叶斯优化在调参中的具体应用,提高模型性能;③学习如何将理论知识转化为实际可运行的代码,并通过可视化工具直观地展示优化效果。 其他说明:代码已在Python 3.10 + CUDA 11.8/CPU环境下验证通过,安装指定版本依赖后可直接运行。建议读者在实践中调整参数设置,探索不同配置下的模型表现。

    GD32F407VET6单片机实验程序源代码1.GPIO输出驱动LED与GD32F4的Keil5软件Pack

    GD32F407VET6单片机实验程序1.GPIO输出驱动LED与GD32F4的Keil5软件Pack

    数据解析领域的核心技术:解析器实现与优化策略详解

    内容概要:本文深入探讨了数据解析的核心技术和实现方法,涵盖了多种常见的解析器如JSON、XML、Protocol Buffers等。首先介绍了JSON解析器的基本实现,包括状态机的设计、递归下降法的应用以及错误恢复机制。接着讨论了XML解析的不同方式,如DOM树构建和SAX解析器的特点。还详细讲解了哈希表在字段映射中的应用,以及正则表达式解析中的预编译优化。此外,文章还涉及了字节流解析中的变长整型编码、链表结构处理不确定长度数据的方法,以及DFA在协议解析中的应用。最后强调了数据解析过程中数据结构选择的重要性及其对性能的影响。 适合人群:具备一定编程基础,尤其是对数据解析感兴趣的软件工程师和技术爱好者。 使用场景及目标:帮助读者理解不同类型解析器的工作原理,掌握解析器设计的关键技术和优化策略,提高在实际项目中处理复杂数据的能力。 其他说明:文中提供了大量代码示例,涵盖多种编程语言,有助于读者更好地理解和实践相关概念。同时,文章还分享了一些实际开发中的经验和教训,为读者提供宝贵的参考。

Global site tag (gtag.js) - Google Analytics