2011年计算机二级考试JAVA知识点整理(74)

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  2)递归

  递归也可以采用Iterator作为枚举手段,但文档中提供了另外的做法

  public void treeWalk() {

  treeWalk(getRootElement());

  }

  public void treeWalk(Element element) {

  for (int i = 0, size = element.nodeCount(); i < size; i++) {

  Node node = element.node(i);

  if (node instanceof Element) {

  treeWalk((Element) node);

  } else { // do something....

  }

  }

  }

  3) Visitor模式

  最令人兴奋的是DOM4J对Visitor的支持,这样可以大大缩减代码量,并且清楚易懂。了解设计模式的人都知道,Visitor是GOF设计模式之一。其主要原理就是两种类互相保有对方的引用,并且一种作为Visitor去访问许多Visitable。我们来看DOM4J中的Visitor模式(快速文档中没有提供)

  只需要自定一个类实现Visitor接口即可。

  public class MyVisitor extends VisitorSupport {

  public void visit(Element element){

  System.out.println(element.getName());

  }

  public void visit(Attribute attr){

  System.out.println(attr.getName());

  }

  }

  调用: root.accept(new MyVisitor())

  Visitor接口提供多种Visit()的重载,根据XML不同的对象,将采用不同的方式来访问。上面是给出的Element和Attribute的简单实现,一般比较常用的就是这两个。VisitorSupport是DOM4J提供的默认适配器,Visitor接口的Default Adapter模式,这个模式给出了各种visit(*)的空实现,以便简化代码。

  注意,这个Visitor是自动遍历所有子节点的。如果是root.accept(MyVisitor),将遍历子节点。我第一次用的时候,认为是需要自己遍历,便在递归中调用Visitor,结果可想而知。

  4. XPath支持

  DOM4J对XPath有良好的支持,如访问一个节点,可直接用XPath选择。

  例如,如果你想查找XHTML文档中所有的超链接,下面的代码可以实现:

  public void bar(Document document) {

  List list = document.selectNodes( //foo/bar );

  Node node = document.selectSingleNode(//foo/bar/author);

  String name = node.valueOf( @name );

  }

  public void findLinks(Document document) throws DocumentException {

  List list = document.selectNodes( //a/@href );

  for (Iterator iter = list.iterator(); iter.hasNext(); ) {

  Attribute attribute = (Attribute) iter.next();

  String url = attribute.getValue();

  }

  }

  5. 字符串与XML的转换

  有时候经常要用到字符串转换为XML或反之,

  6 用XSLT转换XML

  // XML转字符串

  Document document = ...;

  String text = document.asXML();

  // 字符串转XML

  String text = James ;

  Document document = DocumentHelper.parseText(text);

  public Document styleDocument(

  Document document,

  String stylesheet

  ) throws Exception {

  // load the transformer using JAXP

  TransformerFactory factory = TransformerFactory.newInstance();

  Transformer transformer = factory.newTransformer(

  new StreamSource( stylesheet )

  );

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答