簡體   English   中英

如何從java中的URL讀取XML響應?

[英]How to read XML response from a URL in java?

我需要編寫一個簡單的函數,它接受一個URL並處理XML或JSON的響應,我已經檢查了Sun網站https://swingx-ws.dev.java.net/servlets/ProjectDocumentList ,但是HttpRequest對象是無處可尋,有可能用Java做到這一點嗎? 我正在寫一個富客戶端應用程序。

對於輸入流的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());

但是要通過http從服務器到客戶端進行通信,我更喜歡使用粗體庫或spring http invoker lib

如果要直接在屏幕上打印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));

通過常規http請求獲取您的回復,使用:

下一步是解析它。 看一下這篇文章 ,選擇解析器。

如果您特別想使用SwingX-WS ,那么請查看XmlHttpRequestJSONHttpRequest

有關XMLHttpRequest和Swing博客文章中這些類的更多信息。

好吧我想我已經解決了下面的問題是一個有效的代碼

//
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();
        }


    }

}

此代碼用於解析XML包裝JSON響應並使用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 ”} ]`

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);

`

我發現當我嘗試實例化解析器時,上面的答案引起了我的異常。 我在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 ());
}

使用以下代碼執行此操作:

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();
    }
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM