如何从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
How to read XML response from a URL in java?
提问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 请求获取您的响应,使用:
- Apache HttpComponents
- the built-in
URLConnection con = new URL("http://example.com").openConnection()
;
- Apache HttpComponents
- 内置的
URLConnection con = new URL("http://example.com").openConnection()
;
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,请查看XmlHttpRequest和JSONHttpRequest。
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();
}
}
}
}