Jdom可以和已有的XML技术如Simple API for XML (SAX)和 Document Object Model (DOM)相互协作.然而,它并不是简单的从这些api中提取出一些。Jdom从这些已存在的技术中吸收了好的方面,自己建立了一套新的类和接口,用一个Jdom用户的话来说就是:“这些接口是我从一开始阅读org.w3c.dom就期待的”;Jdom可以读入SAX或是DOM的内容,也可以输出SAX或DOM可以接收的格式。这个能力可以使Jdom很好的和已有的用SAX或DOM建立的系统之间整合。
String text = element.getText(); Jdom尽可能的减少程序员的工作量。依据拇指规则,Jdom应该用20%或是更少的努力来完成80%或是更多的java/xml方面的问题。这并不是说Jdom只是支持80%的XML规范(实际上我们希望Jdom100%的支持XML规范)。这个拇指规则是说有些东西可以加进去,但是没有必要。这些api函数应该保持简洁。
<!DOCTYPE Html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> DOCTYPE后边的第一个词揭示文档被强制类型的名字,PUBLIC后边的词是文档类型的公共属性,最后一个词是文档类型的系统属性。文档属性可以上通过文档的getDocType()方法获得,DocType类提供了一组获得文档类型声明的方法。
List getChildren(); // return all children List getChildren(String name); // return all children by name Element getChild(String name); // return first child by name 示例:
// Get a List of all direct children as Element objects List allChildren = element.getChildren(); out.println("First kid: " + ((Element)allChildren.get(0)).getName()); // Get a list of all direct children with a given name List namedChildren = element.getChildren("name"); // Get a list of the first kid with a given name Element kid = element.getChild("name"); 当文档结构事先知道的情况下,getchild()方法很轻易快速的获得嵌套的元素。给出一个XML文档:
int width = table.getAttribute("border").getIntValue(); 你可以转化这些数据到任何的原始数据类型。假如这些属性不能转换成原始数据类型就抛出一个DataConversionException异常。假如属性不存在getAttribute()返回一个null;
<table> <!-- Some comment --> Some text <tr>Some child</tr> <?pi Some processing instrUCtion?> </table> 你可以总是通过下边的方式获得文本内容和子节点:
String text = table.getText(); // "Some text" Element tr = table.getChild("tr"); // <tr> child 这使得标准使用很简单。有些时候例如输出,获得一个文档所有内容的顺序是很重要的。为了这个原因,你可以使用一个非凡的方法叫getMixedContent()。它返回一个list内容可能包含注释,字符串,元素和处理指令的实例。Java程序员可以使用instanceof 来获得内容。下边的代码打印一个文档内容的摘要:
List mixedContent = table.getMixedContent(); Iterator i = mixedContent.iterator(); while (i.hasNext()) { Object o = i.next(); if (o instanceof Comment) { // Comment has a toString() out.println("Comment: " + o); } else if (o instanceof String) { out.println("String: " + o); } else if (o instanceof ProcessingInstruction) { out.println("PI: " + ((ProcessingInstriction)o).getTarget()); } else if (o instanceof Element) { out.println("Element: " + ((Element)o).getName()); } }