我想从其他网站上阅读rss。但我无法阅读rss。我使用Netbeans,我已经添加了JSTL库。我可以使用forEach标签,但每次使用xml标签时都会显示错误。这是我读取rss的代码。我不知道如何用JSTL标签读取rss请帮帮我。
<!-- Filename: ShowStudents.jsp -->
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<HTML>
<BODY>
<c:import var="xmlDoc" url="http://www.manager.co.th/RSS/Home/Breakingnews.xml"/>
<x:parse var="parsedDocument" xml="${xmlDoc}"/>
<table>
<tr>
<th>Title : </th>
<th>Link : </th>
</tr>
<x:forEach select="$parsedDocument/channel/item"> // This code I ever been change to $parsedDocument/rss/channel/ and $parsedDocument/rss/channel/title ,but it show same error.
<tr>
<td> <x:out select="title" /> </td>
<td> <x:out select="link" /> </td>
</tr>
</x:forEach>
</table>
</BODY>
</HTML>
当我运行此代码时,它显示如下错误。如何用JSTL标签读取rss请帮帮我。
描述服务器遇到了 内部错误()阻止了它 完成此请求。
例外
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: org.xml.sax.SAXParseException:内容 不允许在prolog中。 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:527) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) Filter.ThaiRequest.doFilter(ThaiRequest.java:38) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
根本原因
javax.servlet.ServletException: javax.servlet.jsp.JspException: org.xml.sax.SAXParseException:内容 不允许在prolog中。 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) org.apache.jsp.test_jsp._jspService(test_jsp.java:101) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) Filter.ThaiRequest.doFilter(ThaiRequest.java:38) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
根本原因
org.xml.sax.SAXParseException:内容 不允许在prolog中。 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249) com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284) org.apache.taglibs.standard.tag.common.xml.ParseSupport.parseInputSource(ParseSupport.java:227) org.apache.taglibs.standard.tag.common.xml.ParseSupport.parseInputSourceWithFilter(ParseSupport.java:193) org.apache.taglibs.standard.tag.common.xml.ParseSupport.parseReaderWithFilter(ParseSupport.java:199) org.apache.taglibs.standard.tag.common.xml.ParseSupport.parseStringWithFilter(ParseSupport.java:206) org.apache.taglibs.standard.tag.common.xml.ParseSupport.doEndTag(ParseSupport.java:138) org.apache.jsp.test_jsp._jspx_meth_x_005fparse_005f0(test_jsp.java:150) org.apache.jsp.test_jsp._jspService(test_jsp.java:80) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) Filter.ThaiRequest.doFilter(ThaiRequest.java:38) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
现在我可以在servlet中用JDOM读取xml,但是我无法在jsp文件中显示。我可以在servlet中显示xml中的所有数据。我不知道如何仅在jsp文件中显示title和link标签中的数据。请帮帮我。
try {
ReadXMLFile rxml = new ReadXMLFile();
NodeList nodes = (NodeList) rxml.readXML();
for (int i = 0; i < nodes.getLength(); i++) {
/* I can display all data from xml. I want to display data from title and link tag only in JSP file. */
System.out.println(nodes.item(i).getNodeValue());
}
答案 0 :(得分:1)
http://www.manager.co.th/RSS/Home/Breakingnews.xml
处的文档似乎以Byte-Order-Mark开头。
在Java中,只有在XML解析器直接从输入流中读取时才会正确处理。但是,在您的情况下,您正在将文档读入String,然后将该String传递给<x:parse>
标记,并且因为它是从String中读取的,所以它不处理BOM,它认为它是垃圾,并为您提供“prolog中不允许内容”错误。
我认为这在JSP / JSTL中不易修复。我认为您需要编写一个自定义标记来直接从输入流解析文档,或者使用MVC结构在servlet / controller中进行解析,然后转发到JSP以显示数据。