KXML解释本地或网络上的XML文件

//KXML解释本地或网络上的XML文件

//Newsreader.java
/
import java.io.IOException;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

public class Newsreader extends MIDlet
{

    protected void startApp() throws MIDletStateChangeException
    {
        new ReadThread().start();
    }

    protected void pauseApp()
    {
    }

    protected void destroyApp( boolean unconditional ) throws MIDletStateChangeException
    {
    }

    class ReadThread extends Thread
    {

        public void run()
        {
            try
            {
//                String = "http://hi.baidu.com/wishwingliao/hao.xml"
//                    HttpConnection hc = ( HttpConnection ) Connector.open( url );
//
//                    KXmlParser parser = new KXmlParser();
//                    parser.setInput( new InputStreamReader( hc.openInputStream() ) );
                KXmlParser parser = new KXmlParser();
                parser.setInput( this.getClass().getResourceAsStream( "/2.xml" ), null );
                readStory( parser );

            } catch( Exception e )
            {
                e.printStackTrace();
            }
        }
    }

    void readStory( KXmlParser parser ) throws IOException, XmlPullParserException
    {
        String s = null;
        String responseCode = null;
        try
        {
             //转到下一标签,我用|表示中转到达的位置,如:
            //从|<Table>直接跳到
            //|<VOX_TYPE ID = "121" LANG = "CN">4</VOX_TYPE>
            parser.nextTag();
            int eventType = parser.getEventType();// 获取事件类型
            // 如果不是整个文档的结尾,那么就读取,这样子就达到遍历整个文档的目的
            while( eventType != XmlPullParser.END_DOCUMENT )
            {
                // 访问文档根节点
                if( eventType == XmlPullParser.START_DOCUMENT )
                {
                    parser.nextTag();
                }
                else if( eventType == XmlPullParser.START_TAG )
                {
                    s = parser.getName();//获取标签名
                    System.out.println( "解析到" + s + "标签" );
                    //此处可以对各个标签的属性进行操作
                    for( int i = 0; i < parser.getAttributeCount(); i ++ )
                    {
                        System.out.println( s + "标签" + "属性:" + parser.getAttributeName( i ) + "的值为:" + parser.getAttributeValue( i ) );
                    }
                }
                else if( eventType == XmlPullParser.TEXT )
                {
                    responseCode = parser.getText();
                    System.out.println( "解析标签 " + s + "值为:" + responseCode );

                    if( s.equals( "VOX_TYPE" ) )
                    {
                        responseCode = parser.getText();
                        System.out.println( "解析标签 data=" + responseCode );
                    }
                    if( s.equals( "VOX_TYPE_NAME" ) )
                    {
                        responseCode = parser.getText();

                        System.out.println( "解析标签 data=" + responseCode );
                    }
                }
                else if( eventType == XmlPullParser.END_TAG )
                {

                    System.out.println( "结束" + s + "标签解析" );

                    //System.out.println( "结束" + parser.getName() + "标签解析" );
                    responseCode = "";
                    s = "";
                }
                //转到下一个标记符,比如从<NewDataSet>的"<" 转到 ">"
                //我用"|"来标示光标到达的位置来分析整个XML文档的分析过程:
                //如:
                //<VOX_TYPE ID = "121" LANG = "CN">4</VOX_TYPE>
                //<VOX_TYPE_NAME>陆地交通</VOX_TYPE_NAME>
                //</Table>
               
                //光标到<|VOX_TYPE ID = "121" LANG = "CN">4</VOX_TYPE>时,用XmlPullParser.START_TAG可判定到达了开始标记
                //之后呢,用parser.getName()可获取到标签的名称VOX_TYPE
                //用parser.getAttributeCount()可获取到这个标签共有两个属性,即ID和LANG,
                //接着通过循环取回属性值,用到的方法:parser.getAttributeName( i )返回属性名,parser.getAttributeValue( i )返回属性值
                //
                //做完上面的事情好,parser.next()
                //这样光标就到达:<VOX_TYPE ID = "121" LANG = "CN"|>4</VOX_TYPE>
                //用XmlPullParser.TEXT判断光标已到达标签 ">",用parser.getText()取标签的值为4
                //parser.next()
                //此时光标<VOX_TYPE ID = "121" LANG = "CN">4<|/VOX_TYPE>
                //用XmlPullParser.END_TAG判断知道是结束标记,打印System.out.println( "结束" + s + "标签解析" )
                //parser.next()
                //此时光标<VOX_TYPE ID = "121" LANG = "CN">4</VOX_TYPE|>
                //用XmlPullParser.TEXT判断光标已到达标签 ">",用parser.getText()取标签的值为空


                //parser.next()
                //此时光标到达<VOX_TYPE ID = "121" LANG = "CN">4</VOX_TYPE>的一下行:
                //<|VOX_TYPE_NAME>陆地交通</VOX_TYPE_NAME>
                //用XmlPullParser.START_TAG可判定到达了开始标记
                //用parser.getName()可获取到标签的名称VOX_TYPE_NAME
                //parser.next()
                //此时光标位置<VOX_TYPE_NAME|>陆地交通</VOX_TYPE_NAME>
                //用XmlPullParser.TEXT判断光标已到达标签 ">",用parser.getText()取标签的值为:陆地交通
                //parser.next()
                //此时光标位置<VOX_TYPE_NAME>陆地交通<|/VOX_TYPE_NAME>
                //用XmlPullParser.END_TAG判断知道是结束标记,打印System.out.println( "结束" + s + "标签解析" )
                //parser.next()
                //此时光标位置<VOX_TYPE_NAME>陆地交通</VOX_TYPE_NAME|>
                //用XmlPullParser.TEXT判断光标已到达标签 ">",用parser.getText()取标签的值为空

                //parser.next()
                //此时光标到达<VOX_TYPE_NAME>陆地交通</VOX_TYPE_NAME>的下一行
                //<|/Table>
                //用XmlPullParser.END_TAG判断知道是结束标记,打印System.out.println( "结束" + s + "标签解析" )
                //因为这时的s为空值,所以只打印:结束标签解析,实际上是指结束Table标签
                //parser.next()
                //此时光标</Table|>
                //用XmlPullParser.TEXT判断光标已到达标签 ">",用parser.getText()取标签的值为:空

                System.out.println( "转到下一标记符" );
                eventType = parser.next();
            }
        } catch( Exception e )
        {
            e.printStackTrace();
        }

    }
}

 

2.xml
/
<?xml version="1.0" encoding="GB2312"?>
    <string xmlns="http://tempuri.org/">
    <NewDataSet>
          <Table>
            <VOX_TYPE ID = "121" LANG = "CN">4</VOX_TYPE>
            <VOX_TYPE_NAME>陆地交通</VOX_TYPE_NAME>
          </Table>
        <Table>
            <VOX_TYPE ID = "122" LANG = "EN">7</VOX_TYPE>
            <VOX_TYPE_NAME>空中交通</VOX_TYPE_NAME>
        </Table>
        <Table>
            <VOX_TYPE ID = "123" LANG = "CN">50</VOX_TYPE>
            <VOX_TYPE_NAME>娱乐/旅游</VOX_TYPE_NAME>
        </Table>
        <Table>
            <VOX_TYPE ID = "124" LANG = "EN">3</VOX_TYPE>
            <VOX_TYPE_NAME>学校活动</VOX_TYPE_NAME>
        </Table>
        <Table>
            <VOX_TYPE ID = "125" LANG = "CN">30</VOX_TYPE>
            <VOX_TYPE_NAME>酒吧</VOX_TYPE_NAME>
        </Table>
   </NewDataSet>
</string>
/

运行结果
/

解析到string标签
string标签属性:xmlns的值为:http://tempuri.org/
转到下一标记符
解析标签 string值为:
   
转到下一标记符
解析到NewDataSet标签
转到下一标记符
解析标签 NewDataSet值为:
         
转到下一标记符
解析到Table标签
转到下一标记符
解析标签 Table值为:
           
转到下一标记符
解析到VOX_TYPE标签
VOX_TYPE标签属性:ID的值为:121
VOX_TYPE标签属性:LANG的值为:CN
转到下一标记符
解析标签 VOX_TYPE值为:4
解析标签 data=4
转到下一标记符
结束VOX_TYPE标签解析
转到下一标记符
解析标签 值为:
           
转到下一标记符
解析到VOX_TYPE_NAME标签
转到下一标记符
解析标签 VOX_TYPE_NAME值为:陆地交通
解析标签 data=陆地交通
转到下一标记符
结束VOX_TYPE_NAME标签解析
转到下一标记符
解析标签 值为:
         
转到下一标记符
结束标签解析
转到下一标记符
解析标签 值为:
       
转到下一标记符
解析到Table标签
转到下一标记符
解析标签 Table值为:
           
转到下一标记符
解析到VOX_TYPE标签
VOX_TYPE标签属性:ID的值为:122
VOX_TYPE标签属性:LANG的值为:EN
转到下一标记符
解析标签 VOX_TYPE值为:7
解析标签 data=7
转到下一标记符
结束VOX_TYPE标签解析
转到下一标记符
解析标签 值为:
           
转到下一标记符
解析到VOX_TYPE_NAME标签
转到下一标记符
解析标签 VOX_TYPE_NAME值为:空中交通
解析标签 data=空中交通
转到下一标记符
结束VOX_TYPE_NAME标签解析
转到下一标记符
解析标签 值为:
       
转到下一标记符
结束标签解析
转到下一标记符
解析标签 值为:
       
转到下一标记符
解析到Table标签
转到下一标记符
解析标签 Table值为:
           
转到下一标记符
解析到VOX_TYPE标签
VOX_TYPE标签属性:ID的值为:123
VOX_TYPE标签属性:LANG的值为:CN
转到下一标记符
解析标签 VOX_TYPE值为:50
解析标签 data=50
转到下一标记符
结束VOX_TYPE标签解析
转到下一标记符
解析标签 值为:
           
转到下一标记符
解析到VOX_TYPE_NAME标签
转到下一标记符
解析标签 VOX_TYPE_NAME值为:娱乐/旅游
解析标签 data=娱乐/旅游
转到下一标记符
结束VOX_TYPE_NAME标签解析
转到下一标记符
解析标签 值为:
       
转到下一标记符
结束标签解析
转到下一标记符
解析标签 值为:
       
转到下一标记符
解析到Table标签
转到下一标记符
解析标签 Table值为:
           
转到下一标记符
解析到VOX_TYPE标签
VOX_TYPE标签属性:ID的值为:124
VOX_TYPE标签属性:LANG的值为:EN
转到下一标记符
解析标签 VOX_TYPE值为:3
解析标签 data=3
转到下一标记符
结束VOX_TYPE标签解析
转到下一标记符
解析标签 值为:
           
转到下一标记符
解析到VOX_TYPE_NAME标签
转到下一标记符
解析标签 VOX_TYPE_NAME值为:学校活动
解析标签 data=学校活动
转到下一标记符
结束VOX_TYPE_NAME标签解析
转到下一标记符
解析标签 值为:
       
转到下一标记符
结束标签解析
转到下一标记符
解析标签 值为:
       
转到下一标记符
解析到Table标签
转到下一标记符
解析标签 Table值为:
           
转到下一标记符
解析到VOX_TYPE标签
VOX_TYPE标签属性:ID的值为:125
VOX_TYPE标签属性:LANG的值为:CN
转到下一标记符
解析标签 VOX_TYPE值为:30
解析标签 data=30
转到下一标记符
结束VOX_TYPE标签解析
转到下一标记符
解析标签 值为:
           
转到下一标记符
解析到VOX_TYPE_NAME标签
转到下一标记符
解析标签 VOX_TYPE_NAME值为:酒吧
解析标签 data=酒吧
转到下一标记符
结束VOX_TYPE_NAME标签解析
转到下一标记符
解析标签 值为:
       
转到下一标记符
结束标签解析
转到下一标记符
解析标签 值为:
  
转到下一标记符
结束标签解析
转到下一标记符
解析标签 值为:

转到下一标记符
结束标签解析
转到下一标记符

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值