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

KXML2错误:PI must not start with xml 如何解决?
最近学习j2me编程,由于本人的手机nokia6670不支持jsr172,只能用KXML2来解析XML,在实际操作中发现如题的异常,苦思无解。
代码如下:
InputStream is=getClass().getResourceAsStream("PBasic.xml");//解析这个XML正常,但添加元素偶尔也会解析错误
//InputStream is=getClass().getResourceAsStream("Patients.xml");解析这个XML文件就出问题
  if(is==null){ Display.getDisplay(app).setCurrent(new Alert("错误","不能打开XML资源,null,AlertType.ERROR));
return;
}
KXmlParser parser=new KXmlParser();
try {
parser.setInput(is, "UTF-8");
        parser.nextTag();//在这里出现异常
…………
查各资料,得到一个帮助大致是说缺少<?xml version="1.0"?>导致的错误,但实际上我的两个XML文件首行均为"<?xml version="1.0" encoding="UTF-8"?>"。源代码缺少注解,看不明白。
平台:eclipse3.42+eclipseme+wtk2.5+jdk1.6
KXML2:下载源代码放入工程编译
PS:网上很多贴子提出nanoxml,我下了一个发现完全不能在CLDC1.0下运行,nanoxml用了大量CLDC不支持的Clone、CharInputStream等方法。
------解决方案--------------------
该回复于2009-03-18 09:57:52被版主删除
------解决方案--------------------
帮顶
------解决方案--------------------
期待高手给个意见,再说下最新的情况。
在kxml2里设置断点,步步分析,发现kxml2在第二次调用内部方法nextImpl()时出错,不知道为什么出错。
没有人碰到这种问题么?
------解决方案--------------------
用下边的代码来解析下,你那XML,如果不能正确输出XML的内容,那有可能是你的XML有问题

private void parseUsingkXML(InputStream is) throws XmlPullParserException {
        try {

            KXmlParser parser = new KXmlParser();// 实例化
            parser.setInput(is, "utf-8");
            parsekXMLItems(parser);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void parsekXMLItems(KXmlParser parser) throws IOException,
            XmlPullParserException {

        // 接收事件类型
        int eventType = parser.getEventType();
        // 当事件类型不为文档末尾时
        while (eventType != XmlPullParser.END_DOCUMENT) { // true
            // System.out.println("parsekXMLItems");
            switch (eventType) {// 判断事件类型

            case XmlPullParser.START_TAG:// 为开始标记时

                System.out.print("<" + parser.getName());// 输出开始标记

                // 当有属性时,输出属性
                if (parser.getAttributeCount() >= 1)
                    for (int i = 0; i < parser.getAttributeCount(); i++) {