You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中使用DOM解析XML文件时Servlet读取无输出问题排查

问题原因与解决方案

1 XML文件路径配置错误

你代码中Document doc = builder.parse("/movies.xml");使用的是操作系统根目录的绝对路径,无法读取到Web应用内部的XML文件,解析时会直接抛出文件找不到异常。你仅在catch块中将异常栈打印到服务端控制台,没有向前端输出任何错误信息,所以浏览器看起来没有任何反馈。
正确读取Web应用内部资源的方式如下,需要先将movies.xml放到Web应用根目录(与WEB-INF文件夹同级):

// 替换原有的parse代码行
InputStream is = getServletContext().getResourceAsStream("/movies.xml");
Document doc = builder.parse(is);

如果XML文件放在WEB-INF目录下,路径修改为/WEB-INF/movies.xml即可。

2 DOM节点读取逻辑错误

DOM解析器会把XML标签之间的换行、空白字符识别为独立的文本节点,你直接用getChildNodes().item(0)获取到的不是<Name>标签,而是<Movie>和<Name>标签之间的空白文本节点,拿到的内容是空值,自然不会显示有效内容。
不要通过固定索引获取子节点,应该通过标签名精准获取,同时补充缺失的字段输出逻辑:

// 替换原有的遍历逻辑
for(int i = 0; i < elements.getLength(); i++){
    Element movie = (Element) elements.item(i);
    // 读取属性id
    String id = movie.getAttribute("id");
    // 按标签名读取各字段内容,trim()可以去掉多余的空白字符
    String name = movie.getElementsByTagName("Name").item(0).getTextContent().trim();
    String genre = movie.getElementsByTagName("Genre").item(0).getTextContent().trim();
    String director = movie.getElementsByTagName("Director").item(0).getTextContent().trim();
    String releaseDate = movie.getElementsByTagName("releaseDate").item(0).getTextContent().trim();
    String trailer = movie.getElementsByTagName("Trailer").item(0).getTextContent().trim();
    // 输出完整的表格行
    out.println("<tr>" +
        "<td>" + id + "</td>" +
        "<td>" + name + "</td>" +
        "<td>" + genre + "</td>" +
        "<td>" + director + "</td>" +
        "<td>" + releaseDate + "</td>" +
        "<td>" + trailer + "</td>" +
        "</tr>");
}

3 补充异常提示逻辑

可以在catch块中增加前端错误输出,方便排查问题:

catch (Exception e) {
    e.printStackTrace();
    out.println("<p>读取电影信息失败:" + e.getMessage() + "</p>");
}

内容的提问来源于stack exchange,提问作者Mohammed Hamdoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:24:03