web-dev-qa-db-fra.com

Comment lire la réponse XML à partir d'une URL en java?

Je dois écrire une fonction simple qui prend une URL et traite la réponse au format XML ou JSON. J'ai consulté le site Web de Sun https://swingx-ws.dev.Java.net/servlets/ProjectDocumentList , mais L'objet HttpRequest est introuvable, est-il possible de le faire en Java? Je suis en train d'écrire une application de client riche.

42
Imran

Pour l'analyse XML d'un flux d'entrée, vous pouvez faire:

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

Mais pour communiquer via http du serveur au client, je préfère utiliser librairie hessian ou springs http invoker lib

76
Karussell

Si vous souhaitez imprimer du code XML directement à l'écran, vous pouvez utiliser 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));
9
thisisananth

Obtenez votre réponse via une requête http régulière, en utilisant:

L'étape suivante consiste à l'analyser. Jetez un coup d'œil à cet article pour choisir un analyseur.

5
Bozho

Si vous souhaitez spécifiquement utiliser SwingX-WS , jetez un coup d'œil à XmlHttpRequest et JSONHttpRequest

Plus d'informations sur ces classes dans les articles XMLHttpRequest et Swing blog.

2
Pascal Thivent

J'ai trouvé que la réponse ci-dessus m'a causé une exception lorsque j'ai essayé d'instancier l'analyseur. J'ai trouvé le code suivant qui a résolu ceci à 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 ());
}
1
badMonkey

Ok je pense avoir résolu le problème ci-dessous est un code de travail

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


    }

}
1
Imran

Ce code consiste à analyser les enveloppes XML de la réponse JSON et à les afficher dans l'interface à l'aide de 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", "prenom": "Tom", "lastName": "Cruise", "photo": " https://pbs.twimg.com/profile_images/73550509975649378305/B81JwLT7.jpg " }, { "id": "2", "prenom": "Maria", "nom": "Sharapova", "photo": " https://pbs.twimg.com/profile_images/3424509849/bfa1b9121afc39d1dcdb53cfc423bf12.jpeg ". }, { "id": "3", "prenom": "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);

`

1
Suneel

faites le avec le code suivant: 

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

}

0
shiva karnati