gpt4 book ai didi

java - Android Studio - 访问维基百科页面时出现 SAXParseException

转载 作者:行者123 更新时间:2023-12-01 10:11:10 25 4
gpt4 key购买 nike

我的 Android Studio 遇到了一个非常不寻常的问题,该问题是在 4 天前开始的(我假设是在更新之后)。问题是:尝试读取(解析)任何页面时都会抛出异常,无论是维基百科、谷歌、雅虎、一些java文档...,但是当我在Eclipse中编写相同的代码时,一切都工作正常。因此,这是调用类( Activity )的代码:

    `new Thread(new ImgCrawlerThread("https://en.wikipedia.org/wiki/Batman_(comic_book)")).start();`

这是来自 ImgCrawlerThread 的代码:

    public void run() {
// TODO Auto-generated method stub
try {
//Thread.sleep(60000);
URL url = new URL(httpsurl);
HttpsURLConnection https = (HttpsURLConnection)url.openConnection();
DocumentBuilder db;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
Document doc = db.parse(https.getInputStream());
NodeList nodes = doc.getElementsByTagName("img");
System.out.println(nodes.item(0).getAttributes().getNamedItem("src").getNodeValue());
https.disconnect();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();

} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

Android Studio中的异常是从代码中抛出的:文档 doc = db.parse(https.getInputSteam())

Eclipse 执行的结果如下所示:

//upload.wikimedia.org/wikipedia/en/thumb/4/4d/BatmanComicIssue1%2C1940.png/250px-BatmanComicIssue1%2C1940.png

来自 Android Studio:

     `org.xml.sax.SAXParseException: expected: /img read: a (position:END_TAG </a>@43:317 in java.io.InputStreamReader@1f213bb3) 
System.err: at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)
System.err: at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)
System.err: at com.finki.filip.crawlingtest.CrawlerAsync.doInBackground(CrawlerAsync.java:61)
System.err: at com.finki.filip.crawlingtest.CrawlerAsync.doInBackground(CrawlerAsync.java:37)
System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
System.err: at java.lang.Thread.run(Thread.java:818)`

我将感谢任何能给我关于这个非理性问题的理性意见的人!!!

最佳答案

HTML != XML

XML 解析器对于输入语法非常严格。另一方面,网络浏览器必须应对不匹配的标签等问题,并且更加宽容。因此,尝试使用 XML 解析器解析网页将是一场失败的战斗。

甚至 Google 在 Android 内部也存在同样的问题。如果您查看将 HTML 转换为标记的 SpannableString 的 Html.fromHtml() 的源代码,您会发现它们使用一个名为 jsoup 的开源库。这允许像 XML 一样解析“tag-soup”HTML。它会利用真正损坏的 HTML 标记为您创建一个合理的 DOM。我建议您查看适用于您的应用程序的 jsoup。

关于java - Android Studio - 访问维基百科页面时出现 SAXParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104661/

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