Java 无法使用document.getElementById获取元素,返回null
我试图从一个文件中获取一个html节点,该文件稍后将用于计算其所有子体。我在从DOM检索元素时遇到问题。以下是我迄今为止采取的步骤 首先是我的html代码: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>
<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
如果我错了,请更正,但这将导致检索节点。但是,它返回一个空值。我不明白为什么它没有返回正确的值。注意:调试代码时,据我所知,文档中确实包含了所有正确的数据。请尝试执行以下两项操作:
Element element = document.getDocumentElement();
看起来您正在使用通用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);