【问题标题】:How do I parse/read this XML file in JSP如何在 JSP 中解析/读取这个 XML 文件
【发布时间】:2013-04-07 19:39:37
【问题描述】:

我有以下 XML 文件,我正在尝试使用 http://www.easywayserver.com/blog/java-read-xml-file/ 上的教程从 JSP 中读取这些文件:

XML 文件 1:

<root>

  <data v="1.0">

    <cellimage counter="0" cash_filename="C:\Temp\_TempFolder\39d437f08cc302876a70a0f91b137991_h.jpg" width="94" height="141" />

    <cellimage counter="1" cash_filename="C:\Temp\_TempFolder\39d437f08cc302876a70a0f91b137991_h.jpg" width="94" height="141" />

  </data>

</root>

XML 文件 2

<people>
  <person>
    <name>Joe</name>
    <age>30</age>
  </person>
  <person>
    <name>Rob</name>
    <age>29</age>
  </person>
</people>

上面的 XML 文件 1 在下一行引发错误,但第二个 XML 文件工作正常。有人可以告诉我如何使 XML 文件 1 工作吗?

 String dateTagValue=dateElements.getChildNodes().item(0).getNodeValue();

错误堆栈跟踪:

Caused by: org.apache.jasper.JasperException: An exception occurred processing JSP page /html/archivedetails/view.jsp at line 33

30:     for (int i = 0; i < nl.getLength(); i++) {
31:         NodeList nameNlc = doc.getElementsByTagName("counter");
32:         Element nameElements = (Element) nameNlc.item(i);
33:         String nameTagValue = nameElements.getChildNodes().item(0).getNodeValue();
34: 
35:         out.println("name :" + nameTagValue + "<br>");
36:     }


Stacktrace:
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
    at com.liferay.portlet.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:323)
    at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:105)
    ... 167 more
Caused by: java.lang.NullPointerException
    at org.apache.jsp.html.archivedetails.view_jsp._jspService(view_jsp.java:152)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    ... 182 more

【问题讨论】:

  • 答案取决于您如何获得dateElements 的值。此外,您还没有告诉我们发生了什么错误,也没有提供堆栈跟踪。没有更多的代码和堆栈跟踪,没有人可以帮助您。
  • 好的,谢谢,我现在已将堆栈跟踪添加到问题中。

标签: java xml jsp xml-parsing


【解决方案1】:

例外在

String nameTagValue = nameElements.getChildNodes().item(0).getNodeValue();

所以要么nameElements 为空,要么它没有子节点(getChildNodes() 返回空)。

该代码非常可疑,因为您正在循环 nl,但随后使用索引访问 nameNlc 的元素,这些元素的数量可能相同,也可能不同。此外,您正在寻找名为 &lt;counter&gt; 的元素,它们均未出现在任一示例中。

错误消息与您所显示的内容之间存在严重脱节,我怀疑您需要仔细查看您正在执行的操作。可能还有其他不一致之处。

我意识到这是一个边缘的答案(作为评论可能会更好),但评论太长了,鉴于您帖子中的不一致,这可能是您所希望的最好的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2010-10-13
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    相关资源
    最近更新 更多