如何从java中的URL读取XML响应?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2310139/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 05:58:44  来源:igfitidea点击:

How to read XML response from a URL in java?

javaxmlhttprequest

提问by Imran

I need to write a simple function that takes a URL and processes the response which is XML or JSON, I have checked the Sun website https://swingx-ws.dev.java.net/servlets/ProjectDocumentList, but the HttpRequest object is to be found nowhere, is it possible to do this in Java? I`m writting a rich client end app.

我需要编写一个简单的函数,它接受一个 URL 并处理 XML 或 JSON 响应,我已经检查了 Sun 网站https://swingx-ws.dev.java.net/servlets/ProjectDocumentList,但 HttpRequest 对象是无处可寻,是否可以在 Java 中执行此操作?我正在编写一个富客户端应用程序。

采纳答案by Karussell

For xml parsing of an inputstream you can do:

对于输入流的 xml 解析,您可以执行以下操作:

// the SAX way:
XMLReader myReader = XMLReaderFactory.createXMLReader();
myReader.setContentHandler(handler);
myReader.parse(new InputSource(new URL(url).openStream()));

// or if you prefer DOM:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new URL(url).openStream());

But to communicate over http from server to client I prefer using hessian libraryor springs http invoker lib

但是要通过 http 从服务器到客户端进行通信,我更喜欢使用hessian 库或 springs http invoker lib

回答by Bozho

Get your response via a regular http-request, using:

通过常规 http 请求获取您的响应,使用:

The next step is parsing it. Take a look at this articlefor a choice of parser.

下一步是解析它。看看这篇文章来选择解析器。

回答by Pascal Thivent

If you specifically want to use SwingX-WS, then have a look at XmlHttpRequestand JSONHttpRequest.

如果您特别想使用SwingX-WS,请查看XmlHttpRequestJSONHttpRequest

More on those classes in the XMLHttpRequest and Swingblog post.

XMLHttpRequest 和 Swing博客文章中详细了解这些类。

回答by Imran

Ok I think I have solves the problem below is a working code

好的,我想我已经解决了下面的问题是一个工作代码

//
package xmlhttp;

import org.jdesktop.http.Response;

import org.jdesktop.http.Session;

import org.jdesktop.http.State;



public class GetXmlHttp{


    public static void main(String[] args) {

        getResponse();

    }

    public static void getResponse()
    {

        final Session session = new Session();

        try {
            String url="http://192.172.2.23:8080/geoserver/wfs?request=GetFeature&version=1.1.0&outputFormat=GML2&typeName=topp:networkcoverage,topp:tehsil&bbox=73.07846689124875,33.67929015631999,73.07946689124876,33.68029015632,EPSG:4326";
            final Response res=session.get(url);
            boolean notDone=true;
            do
            {
                System.out.print(session.getState().toString());

                if(session.getState()==State.DONE)
                {
                    String xml=res.toString();
                    System.out.println(xml);
                    notDone=false;


                }

            }while(notDone);

        } catch (Exception e1) {

            e1.printStackTrace();
        }


    }

}

回答by thisisananth

If you want to print XML directly onto the screen you can use TransformerFactory

如果您想将 XML 直接打印到屏幕上,您可以使用 TransformerFactory

URL url = new URL(urlString);
URLConnection conn = url.openConnection();

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(conn.getInputStream());

TransformerFactory transformerFactory= TransformerFactory.newInstance();
Transformer xform = transformerFactory.newTransformer();

// that's the default xform; use a stylesheet to get a real one
xform.transform(new DOMSource(doc), new StreamResult(System.out));

回答by badMonkey

I found that the above answer caused me an exception when I tried to instantiate the parser. I found the following code that resolved this at http://docstore.mik.ua/orelly/xml/sax2/ch03_02.htm.

我发现当我尝试实例化解析器时,上面的答案导致了我的异常。我在http://docstore.mik.ua/orelly/xml/sax2/ch03_02.htm找到了解决此问题的以下代码。

import org.xml.sax.*;
import javax.xml.parsers.*;

XMLReader        parser;

try {
    SAXParserFactory factory;

    factory = SAXParserFactory.newInstance ();
    factory.setNamespaceAware (true);
    parser = factory.newSAXParser ().getXMLReader ();
    // success!

} catch (FactoryConfigurationError err) {
    System.err.println ("can't create JAXP SAXParserFactory, "
    + err.getMessage ());
} catch (ParserConfigurationException err) {
    System.err.println ("can't create XMLReader with namespaces, "
    + err.getMessage ());
} catch (SAXException err) {
    System.err.println ("Hmm, SAXException, " + err.getMessage ());
}

回答by Suneel

This Code is to parse the XML wraps the JSON Response and display in the front end using ajax.

这段代码就是解析 XML 包装 JSON Response 并使用 ajax 显示在前端。

Required JavaScript code.
<script type="text/javascript">
$.ajax({
 method:"GET",
 url: "javatpoint.html", 
 
 success : function(data) { 
  
   var json=JSON.parse(data); 
   var tbody=$('tbody');
  for(var i in json){
   tbody.append('<tr><td>'+json[i].id+'</td>'+
     '<td>'+json[i].firstName+'</td>'+
     '<td>'+json[i].lastName+'</td>'+
     '<td>'+json[i].Download_DateTime+'</td>'+
     '<td>'+json[i].photo+'</td></tr>')
  }  
 },
 error : function () {
  alert('errorrrrr');
 }
  });
  
  </script>

[{ "id": "1", "firstName": "Tom", "lastName": "Cruise", "photo": "https://pbs.twimg.com/profile_images/735509975649378305/B81JwLT7.jpg" }, { "id": "2", "firstName": "Maria", "lastName": "Sharapova", "photo": "https://pbs.twimg.com/profile_images/3424509849/bfa1b9121afc39d1dcdb53cfc423bf12.jpeg" }, { "id": "3", "firstName": "James", "lastName": "Bond", "photo": "https://pbs.twimg.com/profile_images/664886718559076352/M00cOLrh.jpg" }] `

[{ "id": "1", "firstName": "Tom", "lastName": "Cruise", "photo": " https://pbs.twimg.com/profile_images/735509975649378305/B81JwLT7.jpg" } ,{ “ID”: “2”, “名字”: “利”, “姓氏”: “莎”, “照片”: “ https://pbs.twimg.com/profile_images/3424509849/bfa1b9121afc39d1dcdb53cfc423bf12.jpeg”} , { "id": "3", "firstName": "James", "lastName": "Bond","照片": " https://pbs.twimg.com/profile_images/664886718559076352/M00cOLrh.jpg" }] `

URL url=new URL("www.example.com"); 

        URLConnection si=url.openConnection();
        InputStream is=si.getInputStream();
        String str="";
        int i;
        while((i=is.read())!=-1){  
            str +=str.valueOf((char)i);
            }

        str =str.replace("</string>", "");
        str=str.replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
        str = str.replace("<string xmlns=\"http://tempuri.org/\">", "");
        PrintWriter out=resp.getWriter();
        out.println(str);

`

`

回答by shiva karnati

do it with the following code:

使用以下代码执行此操作:

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

    try {
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document doc = builder.parse("/home/codefelix/IdeaProjects/Gradle/src/main/resources/static/Employees.xml");
        NodeList namelist = (NodeList) doc.getElementById("1");

        for (int i = 0; i < namelist.getLength(); i++) {
            Node p = namelist.item(i);

            if (p.getNodeType() == Node.ELEMENT_NODE) {
                Element person = (Element) p;
                NodeList id = (NodeList) person.getElementsByTagName("Employee");
                NodeList nodeList = person.getChildNodes();
                List<EmployeeDto> employeeDtoList=new ArrayList();

                for (int j = 0; j < nodeList.getLength(); j++) {
                    Node n = nodeList.item(j);

                    if (n.getNodeType() == Node.ELEMENT_NODE) {
                        Element naame = (Element) n;
                        System.out.println("Employee" + id + ":" + naame.getTagName() + "=" +naame.getTextContent());
                    }
                }
            }
        }
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

}