首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

KXML2异常:PI must not start with xml 怎么解决

2012-12-16 
KXML2错误:PI must not start with xml 如何解决?最近学习j2me编程,由于本人的手机nokia6670不支持jsr172,

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++) {


                        // 输出属性名称
                        System.out
                                .print(" " + parser.getAttributeName(i) + "=");
                        // 输出属性值
                        System.out.print(""" + parser.getAttributeValue(i)
                                + """);
                    }

                System.out.print(">");
                break;

            case XmlPullParser.END_TAG:// 为结束标记时
                System.out.print("</" + parser.getName() + ">");

                break;

            case XmlPullParser.TEXT:// 为文档正文时
                // if (!parser.getText().trim().equals("")) {
                System.out.print(parser.getText());
                // }

                break;

            case XmlPullParser.END_DOCUMENT:
                return;
            }
            eventType = parser.next();
        }
        System.out.println();
    }


[解决办法]
<?xml version="1.0" encoding="UTF-8"?>
改为
<?xml version="1.0" encoding="utf-8"?>
[解决办法]
测试后正常运行,但终不明白原因。
出错的PBasic.xml是从一个access数据库中导出的,未保存XSD,只保存了XML,用楼上的程序不能正确解析,在myEclipse中直接对PBasic.xml右键,myeclipse->format document,保存运行正常。
前几天看到一个英文贴,说kxml2对utf-8编码存在bug,看来kxml2在读取文件时,存在译码不正确的问题。
[解决办法]
我测试的结果是
<?xml version="1.0" encoding="UTF-8"?> 
应改为 
<?xml version="1.0" encoding="utf-8"?>

注意"utf-8"字母要小写,LZ可以尝试下
------解决方案--------------------


愿对KXML有研究的朋友能找出问题的原因,最好能对KXML源码进行修正,给分100。
[解决办法]
没错是<?xml version="1.0"?>导致的错误   <?xml version="1.0"?>必须顶格写。前面不能有空格。
[解决办法]
把你的XML文件格式改成UTF-8without BOM 试试。我之前和你一样的问题,改了就行了。
[解决办法]
KXML2解析GB2312格式的没问题,UTF8就出问题。我遇到过这个问题,目前还不知道怎么解决。
[解决办法]
KXML2解析without BOM的UTF-8本身是没有问题的,只是低版本的jvm不能正确读取utf-8的多字节字符,因此需要再做utf-8代码转换.


[解决办法]
真正的原因是不能有空格,你也许看不到空格,但是他就是存在,搞了半天,终于解决这个问题了
[解决办法]
null

热点排行