问题描述
谢谢大家,拜托了。
解决方案
解决方案二:
dom4j网上例子很多
解决方案三:
packagedom4j;importjava.io.File;importjava.util.Iterator;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.Node;importorg.dom4j.io.OutputFormat;importorg.dom4j.io.SAXReader;importorg.dom4j.io.XMLWriter;publicclassDom4jParseXml{publicstaticvoidmain(String[]args)throwsException{Dom4jParseXmldom4j=newDom4jParseXml();Documentdocument=dom4j.getDocument("ACCP.xml");ElementrootElement=dom4j.getRootElement(document);//方法一:普通的层层解析//dom4j.readElement(rootElement);//方法二:递归方法//dom4j.readInstanceof(rootElement);//方法三:采用Dom4j带的Visitor模式进行解析//rootElement.accept(newMyVistor());//方法四:采用美化格式的输出dom4j.parseFormat(document);}publicvoidparseFormat(Documentdocument)throwsException{OutputFormatoutputFormat=OutputFormat.createPrettyPrint();//OutputFormatoutputFormat=OutputFormat.createCompactFormat();outputFormat.setEncoding("GB2312");XMLWriterwriter=newXMLWriter(System.out,outputFormat);writer.write(document);System.out.println("over");}//通过Dom4j的解析器进行Document的解析操作publicDocumentgetDocument(Stringfilename)throwsException{SAXReadersaxReader=newSAXReader();Documentdocument=saxReader.read(newFile(filename));returndocument;}//获取Document下的根节点publicElementgetRootElement(Documentdocument)throwsException{returndocument.getRootElement();}//方法一:层层解析publicvoidreadElement(ElementrootElement)throwsException{System.out.println(rootElement.getName());for(Iteratoriterator=rootElement.elementIterator();iterator.hasNext();){Elementelement=(Element)iterator.next();System.out.println(element.getName()+element.getText());for(Iteratoriterator2=element.elementIterator();iterator2.hasNext();){Elementelement2=(Element)iterator2.next();System.out.println(element2.getName()+element2.getText());}}}//方法二:递归方法publicvoidreadInstanceof(Elementelement)throwsException{System.out.println(element.getName());for(Iteratoriterator=element.elementIterator();iterator.hasNext();){Nodenode=(Node)iterator.next();if(nodeinstanceofElement){readInstanceof((Element)node);}System.out.println("text:::"+((Element)node).getText());}}}
解决方案四:
方法三的MyVistor方法:packagedom4j;importorg.dom4j.Attribute;importorg.dom4j.Element;importorg.dom4j.VisitorSupport;publicclassMyVistorextendsVisitorSupport{publicvoidvisit(Attributenode){System.out.println("有属性:"+node.getName()+node.getText());}publicvoidvisit(Elementnode){System.out.println("元素是:"+node.getName()+"::元素是"+node.getText());}}
解决方案五:
楼上剖析的真到位!
解决方案六:
这个要根据楼主的需求了,要是XML数据量比较小的话,可以用dom4j,运用dom4j,是将xml的树形结构读到内存中的,然后再做处理,这样一来的话,对内存的消耗比较大。如果数据量比较大的话,可以用SAX解析,SAX解析是读多多少解析多少,这样的话处理大批量的数据,相对来说比较好。至于具体的方法,楼上和google上有很多,楼主自己权衡。