该Java教程针对JDK 8编写。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言变更,了解Java SE 9及其后续版本中更新的语言特性的概述。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息。
每个网页由一系列嵌套的对象组成。这些对象构成了文档对象模型(DOM)。Java applet可以使用Common DOM API遍历和修改其父网页的对象。
考虑一个Java applet的示例,它将其父网页的内容转储出来。
为了遍历和操作DOM树,您首先必须获取对网页的Document对象的引用。您可以使用com.sun.java.browser.plugin2.DOM类中的getDocument方法来实现。下面是一个代码片段,在DOMDump applet的start方法中检索对Document对象的引用。请参阅代码中的内联注释。
public void start() {
try {
// 使用反射获取文档
Class c =
Class.forName("com.sun.java.browser.plugin2.DOM");
Method m = c.getMethod("getDocument",
new Class[] { java.applet.Applet.class });
// 将返回的对象强制转换为HTMLDocument;
// 然后遍历或修改DOM
HTMLDocument doc = (HTMLDocument) m.invoke(null,
new Object[] { this });
HTMLBodyElement body =
(HTMLBodyElement) doc.getBody();
dump(body, INDENT);
} catch (Exception e) {
System.out.println("New Java Plug-In not available");
// 在这种情况下,您可以回退到
// com.sun.java.browser.plugin.dom包中可用的旧引导机制
}
}
现在您已经获取了对Document对象的引用,可以使用Common DOM API遍历和修改DOM树。DOMDump applet遍历DOM树并将其内容写入Java控制台日志。
private void dump(Node root, String prefix) {
if (root instanceof Element) {
System.out.println(prefix +
((Element) root).getTagName() +
" / " + root.getClass().getName());
} else if (root instanceof CharacterData) {
String data =
((CharacterData) root).getData().trim();
if (!data.equals("")) {
System.out.println(prefix +
"CharacterData: " + data);
}
} else {
System.out.println(prefix +
root.getClass().getName());
}
NamedNodeMap attrs = root.getAttributes();
if (attrs != null) {
int len = attrs.getLength();
for (int i = 0; i < len; i++) {
Node attr = attrs.item(i);
System.out.print(prefix + HALF_INDENT +
"attribute " + i + ": " +
attr.getNodeName());
if (attr instanceof Attr) {
System.out.print(" = " +
((Attr) attr).getValue());
}
System.out.println();
}
}
if (root.hasChildNodes()) {
NodeList children = root.getChildNodes();
if (children != null) {
int len = children.getLength();
for (int i = 0; i < len; i++) {
dump(children.item(i), prefix +
INDENT);
}
}
}
}
在浏览器中打开AppletPage.html以查看运行中的DOMDump小程序。请检查Java控制台日志以获取网页的DOM树转储。
Java SE Development Kit (JDK) 6 update 10版本。
下载源代码以进一步进行实验。