【问题标题】:Java DOM parser returns null documentJava DOM 解析器返回空文档
【发布时间】:2016-05-27 20:45:59
【问题描述】:

我有一个要阅读的 HTML 模板:

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

我想找到 ID 为 hey 的标签,然后粘贴新内容(例如新标签)。为此,我使用 DOM 解析器。但是我的代码返回给我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 dom null document domparser


    【解决方案1】:

    您正在尝试使用 Java XML API 解析一段 XML,该 API 非常符合 XML 规范,对临时开发人员没有帮助。

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

    【讨论】:

    • 好的,我明白了! Thx,我现在将尝试这个解决方案(编辑:我的意思是 Jsoup)并告诉它是否有效。
    • 只是为了好玩,给你一个working gist
    • 非常感谢(提供答案和要点)。有效!即使我有一个使用 DOM 和你的要点的可行解决方案,我也会采用 Jsoup 方式,因为这更像是我“思考”的方式,因为我在 JQuery/CSS/JavaScript 领域工作了很多,而且它非常直观!非常感谢!
    【解决方案2】:

    我将您的示例修改为使用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();
            }
        }
    

    【讨论】:

    • 谢谢你,也有用。我喜欢这个库,因为我可以使用 JavaScript 中的所有内容。它让一切都比 DOM/SAX 更舒服!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多