gpt4 book ai didi

java - 使用参数从 URL 解析 InputStream

转载 作者:行者123 更新时间:2023-11-29 22:06:56 25 4
gpt4 key购买 nike

我正在尝试解析下一个网址: http://kavim-t.co.il/include/getXMLStations.asp?parent=55_%20_2

代码:

//using jdom SAX parser
SAXBuilder builder = new SAXBuilder();
URL url = new URL("http://kavim-t.co.il/include/getXMLStations.asp?parent=55_%20_2");
InputStream in = getInputStrem(url);
Document document = builder.build(in); ...

获取输入流():

public static InputStream getInputStrem(URL url) {
InputStream in = null;
try {
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.connect();
in = con.getInputStream();

} catch (IOException e) {
e.printStackTrace();
}
return in;
}

异常“第 3 行错误:第 3 行第 29 列:格式不正确(无效标记)”

尝试运行下一行时得到:

Document document = builder.build(in)  

我认为问题出在 getInputStream() 函数中,

因为如果我将 Url 替换为更简单的(没有参数和经典结构),它工作正常。

最佳答案

这可能是一个字符编码问题。您收到的错误可能是因为 InputStream 被解释为与实际数据不同的字符集。

URL 有一个输入流,还有一个字符集。当您将流提供给 JDOM 时,您将忽略该字符集。

您应该尝试的第一件事是删除所有 getInputStream 代码。 JDOM 有一个直接的 SAXBuilder.build(URL) 方法,该方法将同时考虑流和字符集...

您的整个代码可以这样简化。事实上,如果您给 JDOM 一个 strin 参数,它会将其解释为一个 URL (SystemID),因此您的代码可以像这样简单:

SAXBuilder builder = new SAXBuilder();
Document document = builder.build("http://kavim-t.co.il/include/getXMLStations.asp?parent=55_%20_2");

编辑:---

好吧,我在我的环境中运行了“我的”版本的代码,并且(使用 Xerces 作为解析器)我得到了关于该问题的更多详细信息......:

Caused by: org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 2 of 3-byte UTF-8 sequence.
at org.apache.xerces.impl.io.UTF8Reader.invalidByte(Unknown Source)
at org.apache.xerces.impl.io.UTF8Reader.read(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.scanContent(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanContent(Unknown Source)
... 11 more

所以,您的输入数据似乎没有正确编码....

再次编辑:

这里是 xmllint 在输入文档上的输出。 xmllint 是大多数 Linux 发行版上可用的 unix 程序。它提供了一种很好的“客观”方式来验证您的 XML。

david.xml:3: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xEE 0xF1 0xE5 0xF3
<option value="22958">22958: îñåó øéãéðâ</option><option value="22920">22920: ãé
^

真的,您有一个损坏的 XML 文档。不过,如果您坚持,可以向 JDOM 的 SAXBuilder 添加一个错误处理程序来忽略错误。请在此处查看 JDOM 文档:http://www.jdom.org/docs/apidocs/org/jdom2/input/SAXBuilder.html#setErrorHandler%28org.xml.sax.ErrorHandler%29您可以在其中添加忽略该问题的 ErrorHandler。 (覆盖错误方法,并返回而不是抛出异常)......然后问题将不会被报告,解析器将“继续”,但是您在您的解析结果....

关于java - 使用参数从 URL 解析 InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577905/

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