我有以下代码,这对于从Android中的网络获取xml文档非常标准(据我所知):
URL rssUrl = new URL("web_1.whatever.com");
SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
XMLReader myXMLReader = mySAXParser.getXMLReader();
RSSHandler myRSSHandler = new RSSHandler();
myXMLReader.setContentHandler(myRSSHandler);
myXMLReader.parse(new InputSource(rssUrl.openStream()));
这适用于大多数情况。当我尝试从子域中具有下划线“_”的Web地址获取XML文档时出现问题,如:web_1.whatever.com。 openStream()显然不适用于其中包含下划线的URL。我对于我的生活没有找到任何关于此的文档,并希望找到一种方法来使其适用于带有下划线的URL。输入的URL来自托管XML文件的用户,并使他们在另一个域上托管XML文件是我不想让他们做的事情。我已经尝试了所有我能想到的东西,所以任何帮助都会受到极大的赞赏。
我得到的错误如下。
03-27 03:44:54.274:WARN / System.err(1051):java.io.IOException:索引0处主机名中的非法字符:web_1.whatever.com
03-27 03:44:54.274:WARN / System.err(1051):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:874)
03-27 03:44:54.274:WARN / System.err(1051):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1152)
03-27 03:44:54.274:WARN / System.err(1051):at java.net.URL.openStream(URL.java:653)
有什么想法吗?或者有什么地方我可以看看openStream代码?
感谢。
答案 0 :(得分:4)
有效的主机名不能包含下划线(“_”),所以你看到的是正确的行为。
经过一番搜索后,我发现MS主机名可能违反标准。我能想到的唯一选择是找到一个DNS解析器,它可以处理主机名中的下划线并直接使用IP地址。
答案 1 :(得分:0)
InputStream in = Url.openConnection().getInputStream();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
RssHandler handler = new RssHandler();
parser.parse(in, handler);