该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
版本。
下载源代码以进一步进行实验。