例1@H_301_3@:@H_301_3@@H_301_3@@H_301_3@
/**@H_301_3@@H_301_3@@H_301_3@
*使用DOM4J 创建XML文档并输入带控制台@H_301_3@@H_301_3@@H_301_3@
* @H_301_3@@author@H_301_3@ YZB@H_301_3@@H_301_3@@H_301_3@
public@H_301_3@@H_301_3@class@H_301_3@ Dom4jTest {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@
@H_301_3@public@H_301_3@@H_301_3@static@H_301_3@@H_301_3@void@H_301_3@ main(String[] args) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@// 构造Document对象@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@Document doc=DocumentHelper.@H_301_3@createDocument@H_301_3@();@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@// 一个XML处理指令@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@doc.addProcessingInstruction(@H_301_3@"xml-stylesheet"@H_301_3@,@H_301_3@@H_301_3@" type='text/xsl' href='student.xsl'"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@ Element root=doc.addElement(@H_301_3@"students"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@//创建跟节点@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@//Element root=DocumentHelper.createElement("students");@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@//doc.setRootElement(root);//注意:用这种方法会把先前添加的处理指令清除掉,但在JDOM中不会清除@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@//添加节点对象@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@Element eltstu1=root.addElement(@H_301_3@"student"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@Element eltname1=eltstu1.addElement(@H_301_3@"name"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@Element eltage1=eltstu1.addElement(@H_301_3@"age"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@eltname1.setText(@H_301_3@"张三"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@eltage1.setText(@H_301_3@"27"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@Element eltstu2=root.addElement(@H_301_3@"student"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@Element eltname2=eltstu2.addElement(@H_301_3@"name"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@Element eltage2=eltstu2.addElement(@H_301_3@"age"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@eltname2.setText(@H_301_3@"张三"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@eltage2.setText(@H_301_3@"27"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@//创建输出格式对象@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@OutputFormat outfmt=@H_301_3@new@H_301_3@ OutputFormat(@H_301_3@" "@H_301_3@,@H_301_3@true@H_301_3@,@H_301_3@"gb2312"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@XMLWriter xmlwriter=@H_301_3@null@H_301_3@;@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@try@H_301_3@ {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@//创建输入流@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@//PrintWriter @H_301_3@pw@H_301_3@=new PrintWriter(System.out);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@//调用输入方法@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@//doc.write(@H_301_3@pw@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@//注意如果是输出到文件中要刷新缓冲区@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@ xmlwriter=@H_301_3@new@H_301_3@ XMLWriter(@H_301_3@new@H_301_3@ FileWriter(@H_301_3@"Dom4jstudent.xml"@H_301_3@),outfmt);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@xmlwriter.write(doc);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@} @H_301_3@catch@H_301_3@ (IOException e) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@e.printStackTrace();@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@}@H_301_3@finally@H_301_3@{@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@//@H_301_3@@H_301_3@pw.close();@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@try@H_301_3@ {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@@H_301_3@xmlwriter.close();@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@} @H_301_3@catch@H_301_3@ (IOException e) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@@H_301_3@// @H_301_3@TODO@H_301_3@ Auto-generated catch block@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@@H_301_3@e.printStackTrace();@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@}@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@}@H_301_3@@H_301_3@@H_301_3@@H_301_3@
@H_301_3@}@H_301_3@@H_301_3@@H_301_3@
例2@H_301_3@:@H_301_3@@H_301_3@@H_301_3@
* 使用访问者模式遍历文档树。根据不同的节点进行不同的操作@H_301_3@@H_301_3@@H_301_3@
* 访问者模式通常用于处理对象树结构,树中的每一个节点对象都可以接受一个访问者对象,@H_301_3@@H_301_3@@H_301_3@
* 节点对象向访问者对象传递自身,而访问者对象则反过来调用节点对象的操作@H_301_3@@H_301_3@@H_301_3@
public@H_301_3@@H_301_3@class@H_301_3@ VisitorTest {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@SAXReader saxReader=@H_301_3@new@H_301_3@ SAXReader();@H_301_3@@H_301_3@@H_301_3@
@H_301_3@try@H_301_3@ {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@Document doc=@H_301_3@@H_301_3@saxReader.read(@H_301_3@new@H_301_3@ File(@H_301_3@"student.xml"@H_301_3@));@H_301_3@@H_301_3@@H_301_3@
@H_301_3@doc.accept(@H_301_3@new@H_301_3@ MyVisitor());@H_301_3@@H_301_3@@H_301_3@
@H_301_3@} @H_301_3@catch@H_301_3@ (DocumentException e) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@// @H_301_3@TODO@H_301_3@ Auto-generated catch block@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@e.printStackTrace();@H_301_3@@H_301_3@@H_301_3@
public@H_301_3@@H_301_3@class@H_301_3@ MyVisitor @H_301_3@extends@H_301_3@ VisitorSupport{@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@Override@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@public@H_301_3@@H_301_3@void@H_301_3@ visit(Attribute node) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@System.@H_301_3@out@H_301_3@.println(@H_301_3@"Attribute:"@H_301_3@+node.getName()+@H_301_3@"="@H_301_3@+node.getValue());@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@}@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@public@H_301_3@@H_301_3@void@H_301_3@ visit(Element node) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@if@H_301_3@(node.isTextOnly()){@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@@H_301_3@System.@H_301_3@out@H_301_3@.println(@H_301_3@"Element"@H_301_3@+node.getName()+@H_301_3@" "@H_301_3@+node.getText());@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@}@H_301_3@else@H_301_3@{@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@@H_301_3@System.@H_301_3@out@H_301_3@.println(@H_301_3@"----------"@H_301_3@+node.getName()+@H_301_3@"----------"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@public@H_301_3@@H_301_3@void@H_301_3@ visit(ProcessingInstruction node) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@System.@H_301_3@out@H_301_3@.println(@H_301_3@"PI:"@H_301_3@+node.getTarget()+@H_301_3@" "@H_301_3@+node.getText());@H_301_3@@H_301_3@@H_301_3@
例3@H_301_3@:@H_301_3@@H_301_3@@H_301_3@
* dom4j基于事件的处理,不用解析完文档,在处理,@H_301_3@@H_301_3@@H_301_3@
* 边解析边处理@H_301_3@@H_301_3@@H_301_3@
public@H_301_3@@H_301_3@class@H_301_3@ ElementHandler {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@SAXReader saxReader=@H_301_3@new@H_301_3@ SAXReader();@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@saxReader.addHandler(@H_301_3@"/students/student"@H_301_3@,@H_301_3@new@H_301_3@ StudentHandler());@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@saxReader.read(@H_301_3@new@H_301_3@ File(@H_301_3@"student.xml"@H_301_3@));@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@} @H_301_3@catch@H_301_3@ (DocumentException e) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@// @H_301_3@TODO@H_301_3@ Auto-generated catch block@H_301_3@@H_301_3@@H_301_3@
public@H_301_3@@H_301_3@class@H_301_3@ StudentHandler @H_301_3@implements@H_301_3@ ElementHandler {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@Override@H_301_3@@H_301_3@@H_301_3@
@H_301_3@public@H_301_3@@H_301_3@void@H_301_3@ onStart(ElementPath arg0) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@Element elt=arg0.getCurrent();@H_301_3@//返回当前元素@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@System.@H_301_3@out@H_301_3@.println(@H_301_3@"Found studen:t"@H_301_3@+elt.attributeValue(@H_301_3@"id"@H_301_3@));@H_301_3@//这将返回@H_301_3@sn@H_301_3@属性的值@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@arg0.addHandler(@H_301_3@"name"@H_301_3@,@H_301_3@new@H_301_3@ NameHander());@H_301_3@//创建一个处理程序元素的对象@H_301_3@@H_301_3@@H_301_3@
@H_301_3@public@H_301_3@@H_301_3@void@H_301_3@ onEnd(ElementPath arg0) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@arg0.removeHandler(@H_301_3@"name"@H_301_3@);@H_301_3@@H_301_3@@H_301_3@
@H_301_3@//ElementHandler接口定义了一个处理程序元素的对象@H_301_3@@H_301_3@@H_301_3@
@H_301_3@public@H_301_3@@H_301_3@class@H_301_3@ NameHander @H_301_3@implements@H_301_3@ ElementHandler {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@public@H_301_3@@H_301_3@void@H_301_3@ onStart(ElementPath arg0) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@System.@H_301_3@out@H_301_3@.println(arg0.getPath());@H_301_3@//这将返回路径@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@public@H_301_3@@H_301_3@void@H_301_3@ onEnd(ElementPath arg0) {@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@Element elt=arg0.getCurrent();@H_301_3@@H_301_3@@H_301_3@
@H_301_3@@H_301_3@@H_301_3@System.@H_301_3@out@H_301_3@.println(elt.getName()+@H_301_3@":"@H_301_3@+elt.getText());@H_301_3@@H_301_3@@H_301_3@
}@H_301_3@