有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么JDOM的getChild()方法返回null?

我正在做一个关于html文档操作的项目。我想从现有的html文档的正文内容修改成一个新的html。现在我正在使用JDOM。我想在编码中使用body元素。为此,我在编码中使用了getChild(“body”)。但我的程序返回空值。但是我的html文档有一个body元素。作为一名学生,有谁能帮助我了解这个问题吗

如果你能给我指点

编码:

import org.jdom.Document;
import org.jdom.Element;
public static void getBody() {
SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser", true);
org.jdom.Document jdomDocument=builder.build("http://www......com");
Element root = jdomDocument.getRootElement();
      //It returns null
System.out.println(root.getChild("body"));
}

也请参考这些。。我的html的根目录和子目录打印在控制台中

root.getName():html

SIZE:2

[Element: <head [Namespace: http://www.w3.org/1999/xhtml]/>]

[Element: <body [Namespace: http://www.w3.org/1999/xhtml]/>]

共 (1) 个答案

  1. # 1 楼答案

    我在你的代码中发现了一些问题: 1) 如果您想通过网络构建远程xml,您应该使用另一个构建方法,该方法接收URL作为输入。实际上,您正在将名为“www……com”的文件解析为xml

    Document jdomDocument = builder.build( new URL("http://www........com"));
    

    2)如果要将html页面解析为xml,必须检查它是否是格式良好的xhtml文档,否则无法将其解析为xml

    3)正如我在另一个答案中所说,root.getChild("body")返回root的子级,其名称为“body”,没有名称空间。您应该检查名称空间中要查找的元素;如果它有一个限定的命名空间,则必须以以下方式传递:

    root.getChild("body", Namespace.getNamespace("your_namespace_uri"));
    

    要以简单的方式知道哪个名称空间包含您的元素,您应该使用getChildren方法打印出所有root的子元素:

    for (Object element : doc.getRootElement().getChildren()) {
        System.out.println(element.toString());
    }
    

    如果您试图解析一个xhtml,那么可能有名称空间uri http://www.w3.org/1999/xhtml。所以你应该这样做:

    root.getChild("body", Namespace.getNamespace("http://www.w3.org/1999/xhtml"));