Java DOM 解析器 returns 空文档

Java DOM parser returns null document

我有一个 HTML 模板,我想在其中阅读:

<html>
   <head>
      <title>TEST</title>
   </head>
   <body>
      <h1 id="hey">Hello, World!</h1>
   </body>
</html>

我想找到 ID 为 hey 的标签,然后粘贴新内容(例如新标签)。为此,我使用 DOM 解析器。但是我的代码 returns 我 null:

public static void main(String[] args) {

    try {
        File file = new File("C:\Users\<username>\Desktop\template.html");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(file);
        doc.getDocumentElement().normalize();

        System.out.println(doc.getElementById("hey")); // returns null

    } catch (Exception e) {
        e.printStackTrace();
    }

}

我做错了什么?

您正在尝试使用 Java XML API 解析一段 XML,它非常符合 XML 规范并且不'帮助临时开发人员。

在 XML 中,名为 id 的属性不会自动属于 ID 类型,因此 XML 实现无法通过 .getElementById() 获取它.您要么使用另一个库(例如 Jsoup),要么指示解析器将 id 视为 ID(通过 DTD),或者您使用自定义代码。

我将您的示例修改为使用 jsoup

public static void main(String[] args) {
        try {
            File file = new File("C:\Users\<username>\Desktop\template.html");
            Document doc = Jsoup.parse(file, "UTF8");          
            Element elementById = doc.getElementById("hey");
            System.out.println("hey ="+doc.getElementById("hey").ownText());
            System.out.println("hey ="+doc.getElementById("hey"));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }