当前位置: 首页 > 知识库问答 >
问题:

XmlPullParser获取null而不是START\u标记

苏硕
2023-03-14

我正在尝试解析XML文件,但我对文档有问题!

我对这一行有意见:

parser.require(XmlPullParser.START_TAG, ns, "CarStatus");

但是,我得到的是null而不是START\u标记。

XML HTTP POST响应:

06-20 15:15:40.804: I/RESPONSE(2270): <?xml version="1.0" encoding="utf-8"?>
06-20 15:15:40.804: I/RESPONSE(2270): <CarObject>
06-20 15:15:40.804: I/RESPONSE(2270):   <ResultCode>0</ResultCode>
06-20 15:15:40.804: I/RESPONSE(2270):   <ResultMessage>success</ResultMessage>
06-20 15:15:40.804: I/RESPONSE(2270):   <Cardata xsi:type="ArrayOfCarStatus">
06-20 15:15:40.804: I/RESPONSE(2270):     <CarStatus> 
06-20 15:15:40.804: I/RESPONSE(2270):       <CarID>241</CarID>
06-20 15:15:40.804: I/RESPONSE(2270):       <CarName>ASC</CarName>
06-20 15:15:40.804: I/RESPONSE(2270):     </CarStatus>
06-20 15:15:40.804: I/RESPONSE(2270):   </CarData>
06-20 15:15:40.804: I/RESPONSE(2270): </CarObject>

这是我遇到问题的代码。

private CarStatus readCarStatus(XmlPullParser parser)
            throws XmlPullParserException, IOException {

        parser.require(XmlPullParser.START_TAG, ns, "CarStatus");
        String carId = null;
        String carName = null;

        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }

            String name = parser.getName();
            if (name.equals("CarID")) {
                carId = readCarId(parser);
            } else if (name.equals("CarName")) {
                carName = readCarName(parser);
            } else {
                skip(parser);
            }
        }
        return new CarStatus(carId, carName);
    }

06-20 16:56:15.773: W/System.err(4017): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}CarStatus (position:START_TAG <ResultObject >@2:146 in java.io.InputStreamReader@415f04d8) 
06-20 16:56:15.773: W/System.err(4017):     at org.kxml2.io.KXmlParser.require(KXmlParser.java:2046)
06-20 16:56:15.773: W/System.err(4017):     at com.bentseytlin.maps.MainActivity.readCarStatus(MainActivity.java:174)
06-20 16:56:15.773: W/System.err(4017):     at com.bentseytlin.maps.MainActivity.parse(MainActivity.java:143)
06-20 16:56:15.773: W/System.err(4017):     at com.bentseytlin.maps.MainActivity.onCreate(MainActivity.java:88)
06-20 16:56:15.773: W/System.err(4017):     at android.app.Activity.performCreate(Activity.java:5104)
06-20 16:56:15.780: W/System.err(4017):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3692)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.access$700(ActivityThread.java:141)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240)
06-20 16:56:15.780: W/System.err(4017):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 16:56:15.780: W/System.err(4017):     at android.os.Looper.loop(Looper.java:137)
06-20 16:56:15.780: W/System.err(4017):     at android.app.ActivityThread.main(ActivityThread.java:5041)
06-20 16:56:15.780: W/System.err(4017):     at java.lang.reflect.Method.invokeNative(Native Method)
06-20 16:56:15.780: W/System.err(4017):     at java.lang.reflect.Method.invoke(Method.java:511)
06-20 16:56:15.780: W/System.err(4017):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-20 16:56:15.780: W/System.err(4017):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-20 16:56:15.780: W/System.err(4017):     at dalvik.system.NativeStart.main(Native Method)

谢谢你的帮助!

共有1个答案

安高义
2023-03-14

我认为您错误地使用了要求。我感觉您希望它告诉您START_TAG何时等于

我个人不会使用Require,而是像我在上面的评论中写的那样(这个帖子)。然而,我必须承认,我已经有一段时间没有这样做了。:-)

 类似资料:
  • 问题内容: 我正在尝试了解Windows 8上Python 2.7.6的异常。 这是我正在测试的代码,旨在在处创建一个新目录。如果目录已经存在,我想删除整个目录及其内容,然后创建一个新目录。 问题是,永远不会抛出异常。如果该目录尚不存在,则代码可以正常运行,但是如果该目录确实存在,则出现错误: WindowsError:[错误183]该文件已存在时无法创建该文件:“ My_New_Dir” 但是根

  • 问题内容: 如果我在某个类中有一个很少使用的集合,该集合可能被实例化很多次,则有时我可能会求助于以下“习惯用法”以节省不必要的对象创建: 现在,我想知道是否无法使用来消除这些空检查,但是我将不得不像这样更改if检查: 除了每次都分配一个新的空集合以外,还有更好的方法来处理此问题吗? 编辑: 为了清楚起见,我 想 使用Collections.emptyList(),但是在add()中进行上述检查确实

  • 我从数据库中读取一个字符串值,并通过servlet将其打印到jsp页面上。问题是,在Jsp上,如果数据库中的字段为空,就会打印出字符串“null”。如果数据库中的值为空,我需要一个空白的编辑框。 我的数据库访问对象: 我的Servlet: 我的Jsp: 我的数据库是Oracle 11g,浏览器是FireFox。

  • 我们最近在我们的网站上应用了SSL证书,我们希望我们所有的url都具有https://协议。 一旦我们将网站移动到https://,我们的网站就崩溃了,因为几乎没有指向http:///的资源。经过一段时间的研究,我发现get\u template\u directory\u uri()总是返回http://// 是否有其他地方需要更改URL,因为我们正在使用子主题,此函数获取父主题目录。 谢谢,

  • 问题内容: 我必须编写一个例程,如果变量的类型为,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为或。 第一个实现是因为我认为没有数字会使算术表达式为假,但是由于计算为真,所以这是错误的。然后,我得知行为类似于0,并且以下表达式均被评估为true。 当然不是0。被评估为false。这使看似重言式的表达成为错误。 为什么实际上不是0,却像0? 问题答案: 您真正的问题似乎是: 为什么:

  • 问题内容: 我的桌子如下 输出表如下 我的查询就像: 我无法编写查询;我将如何获得最小列名而不是最小值?我将如何完成田野? 问题答案: 您可以使用一个表达式来做到这一点: