谢谢大家,  拜托了。

解决方案 »

  1.   


    package dom4j;import java.io.File;
    import java.util.Iterator;import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    public class Dom4jParseXml { public static void main(String[] args)throws Exception {
    Dom4jParseXml dom4j=new Dom4jParseXml();
    Document document=dom4j.getDocument("ACCP.xml");
    Element rootElement=dom4j.getRootElement(document);
    //方法一:普通的层层解析
    // dom4j.readElement(rootElement);
    //方法二:递归方法
    // dom4j.readInstanceof(rootElement);
    // 方法三:采用Dom4j带的Visitor模式进行解析
    // rootElement.accept(new MyVistor());
    // 方法四:采用美化格式的输出
    dom4j.parseFormat(document);


    } public void parseFormat(Document document)throws Exception{
    OutputFormat outputFormat = OutputFormat.createPrettyPrint();
    // OutputFormat outputFormat=OutputFormat.createCompactFormat();
    outputFormat.setEncoding("GB2312");
    XMLWriter writer=new XMLWriter(System.out,outputFormat);
    writer.write(document);
    System.out.println("over");
    }

    //通过Dom4j的解析器进行Document的解析操作
    public Document getDocument(String filename)throws Exception{
    SAXReader saxReader=new SAXReader();
    Document document=saxReader.read(new File(filename));
    return document;
    }

    //获取Document下的根节点
    public Element getRootElement(Document document) throws Exception {
    return document.getRootElement();
    }

    //方法一:层层解析
    public void readElement(Element rootElement) throws Exception{
    System.out.println(rootElement.getName());
    for(Iterator iterator=rootElement.elementIterator();iterator.hasNext();){
    Element element =(Element)iterator.next();
    System.out.println(element.getName()+element.getText());
    for(Iterator iterator2=element.elementIterator();iterator2.hasNext();){
    Element element2=(Element)iterator2.next();
    System.out.println(element2.getName()+element2.getText());

    }
    }
    }

    //方法二:递归方法
    public void readInstanceof(Element element)throws Exception{
    System.out.println(element.getName());
    for(Iterator iterator=element.elementIterator();iterator.hasNext();){
    Node node=(Node)iterator.next();
    if(node instanceof Element){
    readInstanceof((Element)node);
    }
    System.out.println("text:::"+((Element)node).getText());
    }
    }}
      

  2.   

    方法三的MyVistor方法:package dom4j;import org.dom4j.Attribute;
    import org.dom4j.Element;
    import org.dom4j.VisitorSupport;public class MyVistor extends VisitorSupport {
    public void visit(Attribute node){
    System.out.println("有属性:"+node.getName()+node.getText());
    }

    public void visit(Element node){
    System.out.println("元素是:"+node.getName()+"::元素是"+node.getText());
    }
    }
      

  3.   

    这个要根据楼主的需求了,要是XML数据量比较小的话,可以用dom4j,运用dom4j,是将xml的树形结构读到内存中的,然后再做处理,这样一来的话,对内存的消耗比较大。如果数据量比较大的话,可以用SAX解析,SAX解析是读多多少解析多少,这样的话处理大批量的数据,相对来说比较好。至于具体的方法,楼上和google上有很多,楼主自己权衡。