首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java Malformedurlexception中的XML解析

java Malformedurlexception中的XML解析
EN

Stack Overflow用户
提问于 2013-04-30 12:03:03
回答 1查看 4K关注 0票数 0

我正在尝试解析一个xml文件,但是会出现Malformedurlexception。你知道为什么会发生这种事吗?

注意:在第一个代码段中,有一行注释system.out.println(requestXml)正在工作( xml作为字符串出现),但是我想解析它,但是解析方法不起作用。

代码语言:javascript
复制
String requestXml = "";

try {
    String argUrl = "http://192.168.1.25:3480/data_request?id=sdata&output_format=xml";

    URL url = new URL(argUrl);
    URLConnection con = url.openConnection();
    // specify that we will send output and accept input
    con.setDoInput(true);
    con.setDoOutput(true);

    con.setConnectTimeout(20000);  // long timeout, but not infinite
    con.setReadTimeout(20000);

    con.setUseCaches(false);
    con.setDefaultUseCaches(false);

    // tell the web server what we are sending
    con.setRequestProperty("Content-Type", "text/xml");

    OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
    writer.write(requestXml);
    writer.flush();
    writer.close();

    // reading the response
    InputStreamReader reader = new InputStreamReader(con.getInputStream());

    StringBuilder buf = new StringBuilder();
    char[] cbuf = new char[2048];
    int num;

    while (-1 != (num = reader.read(cbuf))) {
        buf.append(cbuf, 0, num);
    }
    requestXml = buf.toString();
    xmlParser(requestXml);

    //System.out.println(requestXml);

} catch (Throwable t) {
    t.printStackTrace(System.out);
}
return requestXml;

xmlParser方法是:

代码语言:javascript
复制
protected void xmlParser(String xmlToBeParsed) {

    try {

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(xmlToBeParsed);
        doc.getDocumentElement().normalize();
        NodeList nodes = doc.getElementsByTagName("devices");

        for (int i = 0; i < nodes.getLength(); i++) {
            Node node = nodes.item(i);

            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Element element = (Element) node;
                System.out.println("Stock Symbol: " + getValue("device name", element));

            }
        }

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

}

private static String getValue(String tag, Element element) {
    NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
    Node node = (Node) nodes.item(0);
    return node.getNodeValue();
}  

日志是:

04-30 11:55:21.299: W/System.err(826):java.net.MalformedURLException:未找到协议: 04-30 11:55:21.299: W/System.err(826):04-30 11:55:21.299: W/System.err(826):04-30 11:55:21.299: W/System.err(826):04-30 11:55:21.299: W/System.err(826):04-30 11:55:21.299: W/System.err(826):04-30 11:55:21.299: W/System.err(826):04-30 11:21.299: W/System.err(826):04-30 11:55:21.299: W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:55:55:21.309W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:21.309: W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:21.309: W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:55:21.309: W/System.err(826):04-30 11:55:21.309:W/System.err(826):04-30 11:55:21.309: W/System.err(826):at java.net.URL.(URL.java:178) 04-30 11:55:21.309: W/System.err(826):at java.net.URL.(URL.java:127) 04-30 11:55:21.309: W/System.err(826):at java.net.URL解析( javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:155) ) 04-30 11:55:21.319: W/System.err(826):at com.example.eos.SensorDataConnector.xmlParser(SensorDataConnector.java:93) 04-30 11:55:21.319: W/System.err(826):at com.example.eos.SensorDataConnector.xmlParser(SensorDataConnector.java:93) 04-30 11:55:21.319: W/System.err(826):at com.example.eos.SensorDataConnector.getXMLData(SensorDataConnector.java:71) 04-30 11:55:21.319: W/System.err(826):com.example.eos.EnergyOptimizer$5.onClick(EnergyOptimizer.java:148) 04-30 11:21.319: W/System.err(826):android.view.View.performClick(View.java:4204) 04-30 11:55:21.319: W/System.err(826):at android.view。android.os.Handler.handleCallback(Handler.java:725) (View.java:17355) 04-30 11:55:21.319: W/System.err(826):at android.os.Looper.loop 04-30 11:55:21.319: W/System.err(826):at android.os.Handler.dispatchMessage(Handler.java:92) 04-30 11:55:21.319: W/System.err(826):at android.os.Looper.loop。java:137) 04-30 11:55:21.319: W/System.err(826):在android.app.ActivityThread.main(ActivityThread.java:5041) 04-30 11:55:21.319: W/System.err(826):at java.lang.reflect.Method.invokeNative(原生方法) 04-30 11:55:21.319: W/System.err(826):at java.lang.reflect.Method.invoke(Method.java:511)04-30 11:55:21.319: W/System.err(826):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 04-30 11:55:21.319: W/System.err(826):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 04-30 11:55:21.329: W/System.err(826):at dalvik.system.NativeStart.main(原生方法)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-30 12:14:31

用于解析XML的是这种方法

代码语言:javascript
复制
public Document parse(String uri) throws SAXException, IOException

它基本上期望从其中获取内容的uri。这不是您的情况,因为您已经查询了URL并解析了内容。您没有提供该方法所期望的内容。

我认为,如果跳过连接输入流的所有读取,只需:

代码语言:javascript
复制
InputStream input = con.getInputStream();
xmlParser(input);

注:我已经删除了许多行。然后:

代码语言:javascript
复制
protected void xmlParser(InputStream input)
{

    try {

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(input);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16299445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档