【问题标题】:Reading and Writing from an XML file in Java在 Java 中读取和写入 XML 文件
【发布时间】:2021-11-15 18:50:59
【问题描述】:

我在 java 中创建了一个 XML 文件,该 XML 文件由电影名称、发行日期和预告片组成,编写 XML 文件不是问题,但是当我尝试使用 servlet 从 XML 文件中读取时浏览器没有显示 XML 文件中的任何信息,没有出现错误,代码正在运行,但由于某种原因它没有从文件中读取,我正在使用 DOM 解析器方法来读取和写入,任何人都可以请告诉我读取 XML 文件的方式有什么问题?

这是 XML 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cinema>
  <Movie id="10">
    <Name>Army of Thieves</Name>
    <Genre>Comedy/Action</Genre>
    <Director>Matthias Schweighöfer</Director>
    <releaseDate>29/10/2021</releaseDate>
    <Trailer>https://www.youtube.com/watch?v=Ith2WetKXlg</Trailer>
</Movie>
    <Movie id="11">
    <Name>Dune</Name>
    <Genre>Sci-Fi/Adventure</Genre>
    <Director> Denis Villeneuve</Director>
    <releaseDate>16/09/2021</releaseDate>
    <Trailer>https://www.youtube.com/watch?v=n9xhJrPXop4</Trailer>
</Movie>
</cinema>

这是 servlet:

import java.io.*;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.w3c.dom.*;
import javax.xml.parsers.*;

public class HelloServlet extends HttpServlet {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
public void doGet(HttpServletRequest request, HttpServletResponse response) throws 
ServletException,IOException {
    response.setContentType("text/html");
    try {
        PrintWriter out = response.getWriter();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("/movies.xml"); //put the xml path here
        NodeList elements = doc.getDocumentElement().getElementsByTagName("Movie");

        out.println("<table><tr><th>ID</th><th>Name</th><th>Genre</th><th>Director</th> 
 <th>releaseDate</th><th>Trailer</th></tr>");
        if(elements.getLength() == 0){
            out.println("<tr><td>No information</td></tr>");
        }
        else{
            for(int i = 0; i < elements.getLength(); i++){
                out.println("<tr> 
 <td>"+elements.item(i).getAttributes().item(0).getTextContent()+"</td>"+
                        " 
 <td>"+elements.item(i).getChildNodes().item(0).getTextContent()+"</td>"+
                        " 
 <td>"+elements.item(i).getChildNodes().item(1).getTextContent()+"</td></tr>");
            }
        }
        out.println("</table>");
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

【问题讨论】:

  • 我建议使用调试器逐步完成此操作,以了解发生了什么。
  • 首先,您应该将 e.printStackTrace() 更改为 throw new RuntimeException(e);。这样,您将确定是否发生错误。其次,不要使用getAttributes()getChildNodes()。有时文档解析器会添加属性,而子节点不仅仅是元素。使用getAttribute("id")getElementByTagName("Name")getElementByTagName("Genre")

标签: java servlets


【解决方案1】:

您说您的代码没有从文件中读取。你怎么知道它不是从文件中读取的?有什么例外吗?您是否看到不应该存在的数据?

我通常会尝试知道我的代码正在寻找文件的确切位置。因此我的模式看起来像

File infile = new File("/movies.xml");
log.debug("Reading file "+infile.getAbsolutePath());
Document doc = builder.parse(new FileInputStream(infile));

无论路径是否正确,在日志文件中我都会在运行时了解加载了哪个文件。基于此,我可以检查它是否是错误的位置(并且只是另一个被读取的文件),或者没有设置权限,或者文件不存在,...

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2012-03-04
    • 2014-03-20
    • 2013-03-25
    • 1970-01-01
    • 2015-05-29
    • 2013-01-06
    相关资源
    最近更新 更多