j2me解析xml

来源:互联网 发布:二维旋转矩阵公式 编辑:程序博客网 时间:2024/04/28 16:26
   测试了下,虽然xmlpul和nanoxml两种的两个6,7k的小包都不行,但大的没试,还是记录下来。
  nonoxml方式
  1.   String Result="<root>/n"+"<type1>/n"+"<a>/n"+"001</a>/n"+"<b>/n"
  2.                       +"002</b>/n"+"</type1>/n"+"<type2>/n"+"<a>/n"+"003</a>/n"+"<b>/n"+"004</b>/n"+"</type2>/n"+"</root>/n";
  3.                       ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
  4.    Hashtable entities = new Hashtable();
  5.                      entities.put("foo""bar");
  6.                     XMLElement xml = new XMLElement(entities, falsefalse);
  7.                     // FileReader reader = new FileReader(args[0]);
  8.                      xml.parseString(Result);
  9.                    for(int i=0;i<xml.countChildren();i++){
  10.                      System.out.println(xml.getChildren().size());
  11.                      for(int j=0;j<xml.getChildren().size();j++){
  12.                           System.out.println(xml.getChildren().elementAt(j).toString());  
  13.               }                           
  14.        }    
  nonaxml方式读取要简单点,有getChildren()函数等。具体没自己看。

下面是kxml2方式,直接转网上的
  1.  XmlPullParser parser = new KXmlParser();
  2.                  ByteArrayInputStream bais = new ByteArrayInputStream(Result.getBytes());
  3.                  System.out.println("2");
  4.                 InputStreamReader isr = new InputStreamReader(bais);
  5.                 parser.setInput(isr);
  6.                   int eventType = parser.getEventType();
  7.                    // 如果不是整个文档的结尾,那么就读取,这样子就达到遍历整个文档的目的
  8.                    while (eventType != XmlPullParser.END_DOCUMENT) {
  9.                       if (eventType == XmlPullParser.START_DOCUMENT) {
  10.                                           System.out.println("当前节点的名称:" + parser.getName());
  11.                                        System.out.println("当前节点下的属性:");
  12.                                           int attrCount = parser.getAttributeCount();
  13.                                           for (int i = 0; i < attrCount; i++) {
  14.                                             System.out.println(parser.getAttributeName(i));
  15.                                          }
  16.                                      } else if (eventType == XmlPullParser.START_TAG) {
  17.                                           System.out
  18.                                                .println("---------start tag------------------------------");
  19.                                           System.out.println("节点的名称:" + parser.getName());
  20.                                            System.out.println("当前节点下的属性:");
  21.                                           int attrCount = parser.getAttributeCount();
  22.                                        for (int i = 0; i < attrCount; i++) {
  23.                                              System.out.println(parser.getAttributeName(i) + ":"
  24.                                                      + parser.getAttributeValue(i));
  25.                                           }
  26.                                           // 这里可以根据不同的 节点名称来作出不同的反应,比如text需要单独处理什么
  27.                           
  28.                                       } else if (eventType == XmlPullParser.TEXT) {
  29.                                          System.out.println("---------text tag---------");
  30.                                            // 已经取不到值了
  31.                                            System.out.println("本text属于:" + parser.getAttributeValue("LEVEL_CODE""LEVEL_CODE"));
  32.                                           System.out.println(parser.getText());
  33.                                       } else if (eventType == XmlPullParser.END_TAG) {
  34.                                           System.out.println("---------end tag---------");
  35.                                            System.out.println("当前节点的名称" + parser.getName());
  36.                                          // 可以在这这里把本tag的内容处理掉,比如类似将其放到某个容器中
  37.                                        }
  38.                    eventType = parser.next();
  39.                    }
  装上喵了下,不能直接获得子节点数,得根据eventType判断,也不能直接取某个节点的数据。要next()下去。其中next()是下一个点(这里xml文件中的各个开始标记,结束标记和内容都可以算一个点)。而nexttag(),nexttext就是分类的.
   例如对于下面的串:
String str="<root>/n"+"<type1>/n"+"<a>/n"+"001</a>/n"+"<b>/n"
                +"002</b>/n"+"</type1>/n"+"<type2>/n"+"<a>/n"+"003</a>/n"+"<b>/n"+"004</b>/n"+"</type2>/n"+"</root>/n";
root的next是空,再
next是type1,next是type1,是空,然后是a,然后是001....
而001的nexttext是空(
</a>和<b>之间xml认为为空,next占一位。)

kxml2也就是在xmlpull上封装了下,多了几个文件,大了4K