关于网友提出的“ KXML嵌套解析的问题”问题疑问,本网通过在网上对“ KXML嵌套解析的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: KXML嵌套解析的问题
描述: 比如说一个XML文件这样:
12
12
12
12
我想要解析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,不知道为什么会这样的
解决方案1: 使用kxmlparser可以的。
解决方案2: 楼主你的kxml是哪个版本的啊,现在的版本好像那个类叫KXmlParser 啊,我现在也在研究KXML,没啥头绪啊
解决方案3: 使用一个 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);
}
解决方案4: 你这个方法好麻烦,呵
以上介绍了“ KXML嵌套解析的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2000236.html