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
start_tag -> push localName
.....
character() 取标记 String tag = stack.peek();
if(tag.equals( "c1 ")){
tag = stack.pop();
String tag2 = stack.peek();
if(tag2.equals( "shouji ")){
// do work
}
stack.push(tag);
}
[解决办法]
楼主你的kxml是哪个版本的啊,现在的版本好像那个类叫KXmlParser 啊,我现在也在研究KXML,没啥头绪啊
[解决办法]
使用kxmlparser可以的。