日期:2014-05-20  浏览次数:21165 次

KXML嵌套解析的问题
比如说一个XML文件这样:
<phone>
  <shouji>
      <cl> 12 </cl>
      <bl> 12 </bl>
  </shouji>
  <dianhua>
      <cl> 12 </cl>
      <bl> 12 </bl>
  </dianhua>
</phone>
我想要解析shouji节点中的cl和bl,不要dianhua节点中的cl和bl

解析方法:

public   void   parsekXMLItems(   XmlParser   parser,   Vector   items   )throws   IOException   {
boolean   inItem   =   false;
                boolean   inItem1   =   false;
while(   true   ){
        ParseEvent   event   =   parser.read();
      switch(   event.getType()   ){
      case   Xml.START_TAG:
    if(   event.getName().equals(   str1   )||event.getName().equals(   str2   )){        
      while(   true   ){
ParseEvent   event1   =   parser.read();
switch(   event1.getType()   ){
                  case   Xml.START_TAG:
                    if(   event1.getName().equals(   str3   )||event1.getName().equals(   str4   )){     inItem1   =   true;
}
break;
case   Xml.END_TAG:
                  if(   event1.getName().equals(   str3   )||   event1.getName().equals(   str4   )){
inItem1   =   false;
}
break;
case   Xml.TEXT:
if(   inItem1   ){
chinese   =   new   String(event1.getText().getBytes( "GBK "), "utf-8 ");
items.addElement(chinese);}
break;
                  case   Xml.END_DOCUMENT:
return;
                  }
          inItem   =   true;
          }}
          break;
        case   Xml.END_TAG:
        if(   event.getName().equals(   str1   )||   event.getName().equals(   str2   )){
        inItem   =   false;}
        break;
      case   Xml.TEXT:
      if(   inItem   ){
          chinese   =   new   String(event.getText().getBytes( "GBK "), "utf-8 ");
          items.addElement(chinese);
          }
        break;
        case   Xml.END_DOCUMENT:
        return;
        }}
        }
这就是我现在用来解析的方法,现在是这样写的话,比如我STR1为shouji,str2为空,str3为cl,str4为bl,现在是这样写可以循环解析了,可是要把XML文件的shouji这个节点放到dianhua节点下,要不然解析的就是全部的cl和bl,要是放在dianhua节点下就能解析为shouji中的cl和bl,不知道为什么会这样的



------解决方案--------------------
你这个方法好麻烦,呵
------解决方案--------------------
使用一个 Stack