快速业务通道

J2ME中的XML语法分析利器KXML - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
D_DOCUMENT事件。

1.while ( (event = parser.read()).getType() != Xml.END_DOCUMENT ) { 2. ... 3.if (name != null && name.equals("address")) { 4. ... 5. parseAddressTag( parser );

第三行判断事件是否以一个<address>标记开始,第五行传送语法分析器到控制语法分 析程序的"parseAddressTag"。

1.while ((event = parser.peek()).getType() != Xml.END_DOCUMENT) { 2.... 3. if (type == Xml.END_TAG && name.equals("address")) { 4. return; 5. } 6.... 7. ParseEvent next = parser.read(); 8. 9. // if it''s not a text event then skip it 10. if (next.getType() != Xml.TEXT) { 11. continue; 12. } 13....

14. System.err.println(name + ": " + text);

上面的这段代码在"parseAddressTag"中循环,直到找到与<address>对应的终止标记。 如果它遇到其它任何标记,那么标记名和标记内容就会被打印到控制台上。因此,如果找到 标记<name>Robert Cadena</name>,你将看到下面的控制台输出:

name: Robert Cadena

一旦找到<address>的终止标记(8- 10行),控件被返回调用函数,然后又开始查找< address>。

如你所见,使用Pull语法分析程序非常容易,并且能够传送语法分析程序到另一个函数, 然后在文档中查找元素。你并不局限于分析资源文件;你还可以使用HttpConnection把这个 函数传递到http InputStream。这把你从读取InputStream、保存内容、分析内容等操作中解 放了出来,一切都由KXML为你完成。

J2ME中的XML语法分析利器KXML(3)

时间:2011-04-11 game

DOM处理

Pull语法分析特别适用于当你需要维护非常小的存储空间的时候,因为发出事件的文档只 有一部分存在于内存中。换句话说,如果你感兴趣的特定数据段是文档中部的几百个字节, 那么前面的几百个字节就不必保存在内存中了。

但是如果你能够节省一些内存,你可以使用另一个版本的KXML语法分析程序,它包含对 DOM的支持。 DOM是保存在内存中的整个文档树,每个标记都被分离成节点(Node)对象。 你可以遍历这个文档树,然后根据需要取得数据。

工程中的另一个MIDlet,KXMLDemo_dom,做了同样的事情。它读取一个通讯录,然后把内 容打印到控制台,但是这次它使用了DOM。下面给出源代码中比较重要的几行.

1.Document doc = new Document();

2....

3.parser = new XmlParser( isr );

4.doc.parse( parser );

第一行创建了一个文档,保存XML树。第三行从一个名为isr的InputStreamReader中创建 一个KXML语法分析程序。第四行传送这个语法分析程序到文档,然后让文档开始分析。XML被 递归分析,直到到达文档的结尾。当分析调用退出时,整个文档被装入内存,这时你就可以 操作它了。

1.Element root = doc.getRootElement(); 2.int child_count = root.getChildCount(); 3.... 4.for (int i = 0; i < child_count ; i++ ) { 5.... 6. Element kid = root.getElement(i); 7. 8. if (!kid.getName().equals("address")) { 9. continue; 10. }

因为我们知道<address>元素是根元素的直接子元素,我们可以遍历根元素的子元素, 寻找address标记,如果子元素不是一个address 标记,则返回。

1.int address_item_count = kid.getChildCount(); 2. 3. for (int j = 0; j < address_item_count ; j++) { 4.... 如果我们找到了address子元素,我们开始遍历它的子元素,并把这些子元素的内容 打印出来。不幸的是,你不能只是使用kid.getElement("name"),因为如果这个元素不存在 的话,那么你将得到一个RuntimeException。所以我建议只有当你知道XM

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号