gpt4 book ai didi

java - 使用 XmlPullParser 时 DOCTYPE 给出 'unexpected' 错误

转载 作者:太空狗 更新时间:2023-10-29 15:09:54 25 4
gpt4 key购买 nike

下面是logcat弹出的错误。它无法解析任何 xml 文档开头的 <!DOCTYPE...>。我用一个没有 DOCTYPE 标记的页面尝试了我的程序,但它运行成功。我已经使用 setFeature 启用“FEATURE_PROCESS_DOCDECL”,但它并没有解决问题。

错误:org.xmlpull.v1.XmlPullParserException:意外 <! (位置:START_DOCUMENT null@1:1 在java.io.InputStreamReader@424355f0)

我的代码摘录:

网址 url = 新网址("http://www.google.co.in/webhp?hl=en&tab=ww ");

                XmlPullParserFactory parser = XmlPullParserFactory.newInstance();
parser.setNamespaceAware(true);
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,true);
parser.setFeature(XmlPullParser.FEATURE_PROCESS_DOCDECL,true);
XmlPullParser xpp = parser.newPullParser();

InputStream ip=url.openConnection().getInputStream();

xpp.setInput(ip, HTTP.UTF_8);
Message msg = mHandler.obtainMessage();
Bundle bundle = new Bundle();


int eventType=xpp.getEventType();

if(eventType==XmlPullParser.START_DOCUMENT){

while(eventType!=XmlPullParser.END_DOCUMENT ){

if(eventType!=XmlPullParser.DOCDECL){
eventType=xpp.nextToken();
}
else if(eventType==XmlPullParser.START_TAG){
if(xpp.getName().equalsIgnoreCase("title")){


bundle.putString("message", xpp.nextText());
msg.setData(bundle);
mHandler.sendMessage(msg);
eventType=xpp.nextToken();
}
}

}
}

最佳答案

我也遇到过类似的问题。看起来 XmlPullParser 不接受小写 <!doctype html> ,相反,它期望大写版本 <!DOCTYPE html> . (相关:Uppercase or lowercase doctype?)。

这可以在 org.kxml2.io.KXmlParser.java 中找到:

/**
* Returns the type of the next token.
*/
private int peekType(boolean inDeclaration) throws IOException, XmlPullParserException {

从第 1003 行开始:

case '!':
switch (buffer[position + 2]) {
case 'D':
return DOCDECL; // <!D
case '[':
return CDSECT; // <![
case '-':
return COMMENT; // <!-
case 'E':
switch (buffer[position + 3]) {
case 'L':
return ELEMENTDECL; // <!EL
case 'N':
return ENTITYDECL; // <!EN
}
break;
case 'A':
return ATTLISTDECL; // <!A
case 'N':
return NOTATIONDECL; // <!N
}
throw new XmlPullParserException("Unexpected <!", this, null);

我使用的解决方法是搜索该特定行并将其大写。

关于java - 使用 XmlPullParser 时 DOCTYPE 给出 'unexpected' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17761829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com