Java 在JSP页面中解析基于xml的web服务响应的正确方法是什么。。。?
我不熟悉Java 在JSP页面中解析基于xml的web服务响应的正确方法是什么。。。?,java,web-services,jsp,Java,Web Services,Jsp,我不熟悉Web服务。我想在jsp页面中呈现Web服务响应。 下面是webservice url返回的响应 URL : https://www.domain.com/webservice/pendingbooks?studentNo=123456 XML Response: <?xml version='1.0' encoding='ISO-8859-1'?> <books> <booksnotreturned> &
Web服务
。我想在jsp页面中呈现Web服务响应。
下面是webservice url返回的响应
URL : https://www.domain.com/webservice/pendingbooks?studentNo=123456
XML Response:
<?xml version='1.0' encoding='ISO-8859-1'?>
<books>
<booksnotreturned>
<booksdetails>
<bookno>123545</bookno>
<issueddate>16-12-2013</issueddate>
<duedate>30-01-2014</duedate>
<amt>1000</amt>
</booksdetails>
<booksdetails>
<bookno>123546</bookno>
<issueddate>15-12-2013</issueddate>
<duedate>30-02-2014</duedate>
<amt>2000</amt>
</booksdetails>
<booksdetails>
<bookno>123547</bookno>
<issueddate>17-12-2013</issueddate>
<duedate>25-02-2014</duedate>
<amt>3000</amt>
</booksdetails>
</booksnotreturned>
<totaloutstanding>6000</totaloutstanding>
<bookscount>3</bookscount>
</books>
URL:https://www.domain.com/webservice/pendingbooks?studentNo=123456
XML响应:
123545
16-12-2013
30-01-2014
1000
123546
15-12-2013
30-02-2014
2000
123547
17-12-2013
25-02-2014
3000
6000
3.
我想显示的结果是表格格式…如何做到这一点
更新:这就是我所尝试的
$.ajax({
type: "get",
url: serviceURL,
dataType: "text",
crossDomain: true,
success: function (data) {
alert("success");
var xmlDoc = $.parseXML(data); // then parse into xml
var xml = $(xmlDoc);
var rootTag = xml.find("booksdetails");
$("#output").append("\
<tr class=mainheading>\n\
<td colspan=6 class=heading>Book Details</td>\n\
</tr>\n\
<tr class=heading1>\n\
<th>Book Number</th>\n\
<th>Issued Date</th>\n\
<th>Due Date</th>\n\
<th>Amount</th>\n\
</tr>");
rootTag.each(function () {
var bookno = $(this).find('bookno').text();
var issueddate = $(this).find('issueddate').text();
var duedate = $(this).find('duedate').text();
var amt = $(this).find('amt').text();
$("#output").append('<tr><td>' + bookno + '</td><td>' + issueddate + '</td><td>' + duedate + '</td><td>' + amt + '</td></tr>');
});
},
error: function () {
alert("Error");
}
});
$.ajax({
键入:“获取”,
url:serviceURL,
数据类型:“文本”,
跨域:是的,
成功:功能(数据){
警惕(“成功”);
var xmlDoc=$.parseXML(数据);//然后解析为xml
var xml=$(xmlDoc);
var rootTag=xml.find(“booksdetails”);
$(“#输出”)。追加(”\
\n\
书籍详细信息\n\
\n\
\n\
书号\n\
发布日期\n\
截止日期\n\
金额\n\
");
rootTag.each(函数(){
var bookno=$(this.find('bookno').text();
var issueddate=$(this.find('issueddate').text();
var duedate=$(this.find('duedate').text();
var amt=$(this.find('amt').text();
$(“#输出”)。追加(“”+账簿编号+“”+发行日期+“”+到期日+“”+金额+“”);
});
},
错误:函数(){
警报(“错误”);
}
});
有多种选择。我假设(因为您没有提到)此调用是由web浏览器发出的,浏览器需要对其进行解析以显示HTML表
在本例中,我将使用xslt处理器(例如)将转换为HTML片段。然后可以将该片段注入到HTML DOM中进行显示。(如果您实际上是在JSP中进行调用,那么您可以使用xsl处理器在它进入浏览器之前做同样的事情)
可能有效的xsl模板可能如下所示:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="booksnotreturned/booksdetails">
<tr>
<td><xsl:select value="bookno/text()"/></td>
<td><xsl:select value="issuedate/text()"/></td>
<td><xsl:select value="duedate/text()"/></td>
<td><xsl:select value="amt/text()"/></td>
</tr>
</xsl:template>
<xsl:template match="/">
<table>
<xsl:apply-templates/>
</table>
</xsl:template>
</xsl:stylesheet>
是的,我正在使用$.ajax()调用从jsp页面调用webservice url,我在上面代码中尝试了成功方法。它可以工作,但会让人头疼,因为xml结果很复杂。这是正确的使用方法吗?但如果您不知道xml内容或内容更改了怎么办?是的,您的代码会让人头疼。构建XML树行者比使用XSLT编写模板复杂得多。我建议您访问xsltjs网站,了解如何使用它的详细信息。关于你的第二个问题。。。对web服务有一定的期望。如果您不能信任来自web服务的内容,那么您必须在尝试解析或显示结构之前实现逻辑来测试结构。