android中的XML Pull Parser异常

时间:2012-06-15 09:00:04

标签: android xml soap xml-parsing

我正在尝试通过Android手机访问网络服务。 Web服务在localhost上发布。但现在我收到了以下错误。有人有经验吗?

    06-15 14:27:03.969: WARN/System.err(277): org.xmlpull.v1.XmlPullParserException: attr value delimiter missing! (position:START_TAG <html dir='null'>@2:11 in java.io.InputStreamReader@44f4e7d0) 
    06-15 14:27:04.000: WARN/System.err(277):     at org.kxml2.io.KXmlParser.exception(KXmlParser.java:273)
    06-15 14:27:04.000: WARN/System.err(277):     at org.kxml2.io.KXmlParser.error(KXmlParser.java:269)
    06-15 14:27:04.000: WARN/System.err(277):     at org.kxml2.io.KXmlParser.parseStartTag(KXmlParser.java:708)
    06-15 14:27:04.000: WARN/System.err(277):     at org.kxml2.io.KXmlParser.nextImpl(KXmlParser.java:342)
    06-15 14:27:04.000: WARN/System.err(277):     at org.kxml2.io.KXmlParser.next(KXmlParser.java:1385)
    06-15 14:27:04.011: WARN/System.err(277):     at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:1415)
    06-15 14:27:04.011: WARN/System.err(277):     at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)
    06-15 14:27:04.011: WARN/System.err(277):     at org.ksoap2.transport.Transport.parseResponse(Transport.java:63)
    06-15 14:27:04.099: DEBUG/dalvikvm(277): GC_FOR_MALLOC freed 5747 objects / 296016 bytes in 90ms
    06-15 14:27:04.109: WARN/System.err(277):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:100)
    06-15 14:27:04.109: WARN/System.err(277):     at com.psl.virtual.transport.HttpUtil.sendRequest(HttpUtil.java:41)
    06-15 14:27:04.109: WARN/System.err(277):     at com.psl.virtual.ui.VMLoginScreen.check(VMLoginScreen.java:98)
    06-15 14:27:04.109: WARN/System.err(277):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-15 14:27:04.109: WARN/System.err(277):     at java.lang.reflect.Method.invoke(Method.java:521)
    06-15 14:27:04.109: WARN/System.err(277):     at android.view.View$1.onClick(View.java:2067)
    06-15 14:27:04.109: WARN/System.err(277):     at android.view.View.performClick(View.java:2408)
    06-15 14:27:04.109: WARN/System.err(277):     at android.view.View.onKeyUp(View.java:4121)
    06-15 14:27:04.109: WARN/System.err(277):     at android.widget.TextView.onKeyUp(TextView.java:4431)
    06-15 14:27:04.109: WARN/System.err(277):     at android.view.KeyEvent.dispatch(KeyEvent.java:1061)
    06-15 14:27:04.109: WARN/System.err(277):     at android.view.View.dispatchKeyEvent(View.java:3740)
    06-15 14:27:04.109: WARN/System.err(277):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
    06-15 14:27:04.109: WARN/System.err(277):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
    06-15 14:27:04.120: WARN/System.err(277):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
    06-15 14:27:04.120: WARN/System.err(277):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
    06-15 14:27:04.120: WARN/System.err(277):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1667)
    06-15 14:27:04.120: WARN/System.err(277):     at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1102)
    06-15 14:27:04.120: WARN/System.err(277):     at android.app.Activity.dispatchKeyEvent(Activity.java:2063)
    06-15 14:27:04.120: WARN/System.err(277):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643)
    06-15 14:27:04.120: WARN/System.err(277):     at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
    06-15 14:27:04.120: WARN/System.err(277):     at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441)
    06-15 14:27:04.130: WARN/System.err(277):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1735)
    06-15 14:27:04.130: WARN/System.err(277):     at android.os.Handler.dispatchMessage(Handler.java:99)
    06-15 14:27:04.130: WARN/System.err(277):     at android.os.Looper.loop(Looper.java:123)
    06-15 14:27:04.130: WARN/System.err(277):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    06-15 14:27:04.130: WARN/System.err(277):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-15 14:27:04.130: WARN/System.err(277):     at java.lang.reflect.Method.invoke(Method.java:521)
    06-15 14:27:04.130: WARN/System.err(277):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    06-15 14:27:04.130: WARN/System.err(277):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    06-15 14:27:04.130: WARN/System.err(277):     at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:1)

我发现有两种情况,XmlPullParser不喜欢HTML被解析 - 在第一种情况下HTML是有效的,在第二种情况下HTML是无效的,但似乎很可能发生:

1)不带引号的属性值,如:

<img class=logoimg ...

然而HTML (5.1)规范允许它:

  

不带引号的属性值语法   属性名称,后跟零个或多个空格字符,后跟单个U + 003D EQUALS SIGN字符,后跟零个或多个空格字符,后跟属性值,除了上面给出的属性值要求之外,不得包含任何文字空格字符,任何U + 0022 QUOTATION MARK字符(“),U + 0027 APOSTROPHE字符('),U + 003D EQUALS SIGN字符(=),U + 003C LESS-THAN SIGN字符(&lt;) ,U + 003E GREATER-THAN SIGN字符(&gt;)或U + 0060 GRAVE ACCENT字符(`),不得为空字符串。

     

在以下示例中,value属性使用不带引号的属性值语法:

<input value=yes>
  

如果使用不带引号的属性语法的属性后跟另一个属性或上面的开始标记语法的步骤6中允许的可选U + 002F SOLIDUS字符(/),那么必须有一个空格字符分隔2。

2)以逗号分隔的属性值,如:

<meta name=viewport content="width=device-width, initial-scale=1">

再次来自规范:

  

如果使用双引号属性语法的属性   然后是另一个属性,那么必须有一个空格字符   将两者分开。

缺点是,解析代码(即使用XmlPullParser的代码)需要容忍异常情况 - 特别是因为解析器似乎继续保持良好状态。