Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用document.getElementById获取元素,返回null_Java_Javascript_Html_Parsing_Dom - Fatal编程技术网

Java 无法使用document.getElementById获取元素,返回null

Java 无法使用document.getElementById获取元素,返回null,java,javascript,html,parsing,dom,Java,Javascript,Html,Parsing,Dom,我试图从一个文件中获取一个html节点,该文件稍后将用于计算其所有子体。我在从DOM检索元素时遇到问题。以下是我迄今为止采取的步骤 首先是我的html代码: <html> <head> <title></title> </head> <body> <div id="container"> <a></a> <div id="header">

我试图从一个文件中获取一个html节点,该文件稍后将用于计算其所有子体。我在从DOM检索元素时遇到问题。以下是我迄今为止采取的步骤

首先是我的html代码:

<html>
<head>
    <title></title>
</head>
<body>
<div id="container">
    <a></a>
    <div id="header">
        <div id="firstchild">
            <div>
                <img></img>
            </div>
            <a></a>
            <ul>
                <li>
                    <a>Inbox</a>
                </li>
                <li>
                    <a>Logout</a>
                </li>
            </ul>
            <form></form>
        </div>
        <div id="nextsibling"></div>
    </div>
</div>
</body>
</html>
接下来,在我的main方法中,我尝试通过getElementById将节点对象设置为文档元素,如下所示:

public Document doc = buildDocument("myHTMLFile");
org.w3c.dom.Node node = doc.getElementById("header");//the id of an html element

如果我错了,请更正,但这将导致检索节点。但是,它返回一个空值。我不明白为什么它没有返回正确的值。注意:调试代码时,据我所知,文档中确实包含了所有正确的数据。

请尝试执行以下两项操作:

  • 在buildDocument()函数中,添加以下行:

      Element element = document.getDocumentElement();
    
  • 将函数的返回类型更改为“Element”并返回“Element”

  • 创建一个“Element”对象而不是“Document”对象,并对其调用“getElementById()
  • 如果缺少.html扩展名,请检查文件名

  • 看起来您正在使用通用XML DOM。XML希望id是这样定义的,因此,具有属性的元素,即使命名为“id”,除非指定为id,否则将无法工作

    尝试查找特定于HTML的接口或添加将id属性定义为id类型的DOCTYPE。(但我不推荐后者,因为HTML5已经不再尝试XHTML兼容的方法,即使它在技术上支持XHTML序列化。)请参阅,以获得有关特定于HTML的解析器的建议。

    您做得不对。Javadoc 他说:

    返回具有给定值的ID属性的元素。如果不存在这样的元素,则返回null。。。DOM实现需要使用属性Attr.isId来确定属性是否为ID类型。 注意:名为“ID”或“ID”的属性不属于ID类型,除非这样定义。

    在您的情况下,最好的解决方案是使用(XML的简单查询语言):


    Expression/*[@id='header']-选择文档中属性id为'header'值的所有节点。

    您能为
    捕获添加更通用的异常吗?(顺便说一句,我不是一个Java的家伙)另外,你正在通过“myHTMLFile”?我假设它有一个扩展名或
    parse
    方法需要的任何东西来获取其内容,而不是将其解释为字符串?我不认为错误在构建文档函数中,当我逐步通过程序时,我能够看到documat,并且可以看到其中的所有元素。当调用getElementById时,它似乎找不到id,但我知道它在那里,所以我不知道它为什么找不到它。@brett,是的,这是扩展名,我用它来回答这个问题。谢谢你,效果很好!!!一旦我能够得到元素,我的其余代码就可以完美地工作。哇,这个api太愚蠢了。。很明显,属性id是每个人作为id的意思。。。
      Element element = document.getDocumentElement();
    
    XPath xpath = XPathFactory.newInstance().newXPath();
    Node node = (Node) xpath.evaluate("//*[@id='header']", document, XPathConstants.NODE);