Resumo de várias maneiras de analisar XML por Java
O primeiro tipo: DOM.
O nome completo do DOM é o modelo de objeto Document, que é o modelo de objeto de documento. Em um aplicativo, o analisador XML baseado em DOM converte um documento XML em uma coleção de modelos de objetos (geralmente chamado de árvore DOM). O aplicativo implementa a operação dos dados do documento XML por meio de operações neste modelo de objeto. Através da interface DOM, um aplicativo pode acessar qualquer parte dos dados em um documento XML a qualquer momento. Portanto, esse mecanismo usando a interface DOM também é chamado de mecanismo de acesso aleatório.
A interface DOM fornece uma maneira de acessar as informações do documento XML por meio de um modelo de objeto hierárquico. Esses modelos de objetos hierárquicos formam uma árvore de nós com base na estrutura de documentos XML. Independentemente do tipo de informação descrita no documento XML, mesmo dados de tabulação, listas de projetos ou um documento, o modelo gerado usando o DOM está na forma de uma árvore de nós. Ou seja, o DOM força o uso de um modelo de árvore para acessar informações em um documento XML. Como o XML é essencialmente uma estrutura hierárquica, esse método de descrição é bastante eficaz.
O método de acesso aleatório fornecido pela árvore Dom traz grande flexibilidade ao desenvolvimento de aplicativos e pode controlar arbitrariamente o conteúdo em todo o documento XML. No entanto, como o analisador DOM converte todo o documento XML em uma árvore dom e a coloca na memória, o requisito de memória é relativamente alto quando o documento é maior ou a estrutura é relativamente complexa. Além disso, atravessar árvores com estruturas complexas também é uma operação demorada. Portanto, os analisadores DOM têm requisitos relativamente altos para o desempenho da máquina e sua eficiência de implementação não é muito ideal. No entanto, como a idéia da estrutura de árvores adotada pelo analisador DOM é consistente com a estrutura do documento XML e, dada a conveniência trazida pelo acesso aleatório, o analisador DOM ainda possui uma ampla gama de valor útil.
importar java.io.file; importar javax.xml.parsers.documentBuilder; importar javax.xml.parsers.documentBuilderFactory; importar org.w3c.dom.document; importar org.w3c.dom.Element; importar org.w3c.dom.nodelist; classe pública domtest1 {public static void main (string [] args) lança Exceção {// Etapa 1: Get the Dom Parser Factory (a função do trabalho é criar um analisador específico) DocumentBuilderFactory dbf = documentBuilderFactory.NewInstance (); // System.out.println ("Nome da classe:" + dbf.getclass (). GetName ()); // Etapa 2: obtenha o documentBuilder Documbuilder específico DOM = dbf.newdocumentBuilder (); // System.out.println ("Nome da classe:" + db.getclass (). GetName ()); // Etapa3: analise um documento XML e obtenha o documento do objeto Document (nó root) documento = db.parse (novo arquivo ("candidato.xml")); Nodelist List = document.getElementsByTagName ("Pessoa"); for (int i = 0; i <list.getLength (); i ++) {elemento elemento = (elemento) list.item (i); String content = element.getElementsByTagName ("nome"). Item (0) .getfirstChild (). GetNodEvalue (); System.out.println ("Nome:" + Content); content = element.getElementsByTagName ("endereço"). Item (0) .getfirstChild (). getNodEvalue (); System.out.println ("endereço:" + content); content = element.getElementsByTagName ("tel"). Item (0) .getfirstChild (). getNodEvalue (); System.out.println ("Tel:" + Content); content = element.getElementsByTagName ("fax"). Item (0) .getfirstChild (). getNodEvalue (); System.out.println ("Fax:" + content); content = element.getElementsByTagName ("email"). item (0) .getfirstchild (). getNodEvalue (); System.out.println ("Email:" + Content); System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- importar java.io.file; importar javax.xml.parsers.documentBuilder; importar javax.xml.parsers.documentBuilderFactory; importar org.w3c.dom.attr; importar org.w3c.dom.comment; importar org.w3c.dom.document; importar org.w3c.dom.Element; importar org.w3c.dom.namednodemap; importar org.w3c.dom.node; importar org.w3c.dom.nodelist; / ** * Use recursivamente para analisar qualquer documento XML e produzir seu conteúdo para a linha de comando * @Author Zhanglong * */ public class DomTest3 {public static void main (string [] args) lança exceção {DocumentBuilderFactory dbf = DocumentBuilderFactory.NewInstance (); Documentbuilder db = dbf.newdocumentBuilder (); Documento doc = db.parse (novo arquivo ("Student.xml")); // Obter elemento raiz do elemento elemento root = doc.getDocumentElement (); Parseelement (raiz); } Parseelement de void estático privado (elemento elemento) {string tagname = element.getNodename (); Filhos nodelist = element.getChildNodes (); System.out.print ("<" + tagname); // O objeto NomeNodemap composto por todos os atributos do elemento elemento precisa ser julgado no nome denodemap map = element.getAttributes (); // se o elemento possui atributos if (null! = Map) {for (int i = 0; i <map.getLength (); i ++) {// obtenha cada atributo do elemento att att = (att) map.item (i); String attName = att.getName (); String attValue = att.getValue (); System.out.print ("" + attName + "=/" " + attValue +"/""); }} System.out.print (">"); for (int i = 0; i <ChildreL.getLength (); i ++) {nó nó = children.iTem (i); // Obtenha o tipo de nó curto nodeType = node.getNodeType (); if (nodeType == Node.Element_Node) {// é um elemento, continue a parseelemento recursivamente (nó (elemento)); } else if (nodeType == node.text_node) {// Recursivente sai System.out.print (node.getNodEvalue ()); } else if (nodeType == node.comment_node) {System.out.print ("<!-"); Comentário comentário = (comentário) nó; // Comentário conteúdo string data = comment.getData (); System.out.print (dados); System.out.print ("->"); }} System.out.print ("</" + tagname + ">"); }}Sax: O nome completo do sax é um simples APIs para XML, que é a interface do programa de aplicativos simples XML. Ao contrário do DOM, o modo de acesso fornecido pelo Sax é um modo seqüencial, que é uma maneira de ler e gravar rapidamente dados XML. Quando um documento XML é analisado usando o analisador SAX, uma série de eventos será acionada e as funções de manuseio de eventos correspondentes serão ativadas. O aplicativo pode acessar o documento XML por meio dessas funções de manuseio de eventos. Portanto, a interface sax também é chamada de interface acionada por eventos.
importar java.io.file; importar javax.xml.parsers.saxparser; importar javax.xml.parsers.saxparserFactory; importar org.xml.sax.attributes; importar org.xml.sax.saxException; importar org.xml.sax.helpers.defaulthandler; classe pública saxtest1 {public static void main (string [] args) lança Exceção {// Etapa1: obtenha a instância do analisador sax SAXPARSERFACTORY Factory = saxParserFactory.newInstance (); // Etapa2: Obtenha o analisador de SaxParser da Instância do SAX = Factory.NewsAxParser (); // Etapa3: Iniciar parser.parse (novo arquivo ("Student.xml"), new MyHandler ()); }} classe MyHandler estende o DefaultHandler {@Override public void startDocument () lança saxException {System.out.println ("parse iniciado"); } @Override public void enddocument () lança saxException {System.out.println ("parse acabado"); } @Override public void startElement (String Uri, String LocalName, String QName, Atributos Atributos) lança saxException {System.out.println ("Start Element"); } @Override public void endElement (String URI, String LocalName, String QNAME) lança saxException {System.out.println ("elemento de acabamento"); }} importar java.io.file; importar java.util.stack; importar javax.xml.parsers.saxparser; importar javax.xml.parsers.saxparserFactory; importar org.xml.sax.attributes; importar org.xml.sax.saxException; importar org.xml.sax.helpers.defaulthandler; classe pública saxtest2 {public static void main (string [] args) lança exceção {saxParserFactory Factory = saxParserFactory.newInstance (); SAXPARSER analiser = Factory.NewsAxParser (); parser.parse (novo arquivo ("Student.xml"), new MyHandler2 ()); }} classe MyHandler2 estende o DefaultHandler {private Stack <String> Stack = new Stack <String> (); nome de string privado; gênero de cordas privadas; idade de cordas privadas; @Override public void startElement (String URI, String LocalName, String QName, Atributos Atributos) lança saxException {Stack.push (qname); for (int i = 0; i <attr atributes.getLength (); i ++) {string attName = attributes.getqname (i); String attValue = attritutes.getValue (i); System.out.println (attName + "=" + attValue); }} @Override Public void caracteres (char [] ch, int start, int length) lança saxException {string tag = stack.peek (); if ("nome" .equals (tag)) {name = new String (ch, start, comprimento); } else if ("gênero" .equals (tag)) {gênero = new string (ch, start, comprimento); } else if ("idade" .equals (tag)) {Age = new String (ch, start, comprimento); }} @Override public void endElement (String URI, String LocalName, String QName) lança saxException {Stack.pop (); // indica que o elemento foi analisado e precisa sair da pilha se ("aluno" .equals (qname)) {System.out.println ("nome:" + nome); System.out.println ("gênero:" + gênero); System.out.println ("idade:" + idade); System.out.println (); }}}JDOM:
A JDOM é um projeto de código aberto baseado em uma estrutura de árvores e usa a tecnologia Java pura para implementar a análise, geração, serialização e várias operações nos documentos XML. (http://jdom.org)
• A JDOMIVE SERVIA diretamente programação Java. Ele utiliza muitos recursos do idioma Java mais poderoso (sobrecarga de métodos, conceitos de coleção etc.) para combinar efetivamente as funções de Sax e DOM.
• JDOM é uma nova função da API para ler, escrever e operar XML no idioma Java. Essas funções da API são otimizadas na extensão máxima sob a premissa de franqueza, simplicidade e eficiência.
JDOM CRIE XML
importar java.io.filewriter; importar org.jdom.attribute; importar org.jdom.comMEM; importar org.jdom.document; importar org.jdom.Element; importar org.jdom.output.format; importar org.jdom.output.xmloutputter; public class JdomTest1 {public static void main (string [] args) lança Exceção {document document = new Document (); Elemento root = novo elemento ("root"); document.addContent (root); Comentário comentário = novo comentário ("Este é o meu comentário"); root.addContent (comentário); Elemento e = novo elemento ("hello"); E.SetAttribute ("Sohu", "www.sohu.com"); root.AddContent (e); Elemento E2 = novo elemento ("mundo"); Atributo att = novo atributo ("teste", "hehe"); e2.setAtattribute (att); E.AddContent (E2); e2.AddContent (novo elemento ("aaa"). setAttribute ("a", "b") .SetAttribute ("x", "y"). setattribute ("gg", "hh"). setText ("conteúdo de texto"); Formato formato = formato.getttyFormat (); format.setIndent (""); // format.setEncoding ("gbk"); XmlOutputter out = new XmlOutputter (formato); out.Output (document, novo FileWriter ("jdom.xml")); }}JDOM Parsing xml
importar java.io.file; importar java.io.fileOutputStream; importar java.util.list; importar org.jdom.attribute; importar org.jdom.document; importar org.jdom.Element; importar org.jdom.input.saxbuilder; importar org.jdom.output.format; importar org.jdom.output.xmloutputter; public class JdomTest2 {public static void main (string [] args) lança Exceção {saxbuilder Builder = new saxbuilder (); Documento doc = builder.build (novo arquivo ("jdom.xml")); Elemento elemento = doc.getrootelement (); System.out.println (element.getName ()); Elemento hello = element.getChild ("hello"); System.out.println (hello.getText ()); Lista da lista = hello.getAttributes (); for (int i = 0; i <list.size (); i ++) {attribute att = (attribute) list.get (i); String attName = att.getName (); String attValue = att.getValue (); System.out.println (attName + "=" + attValue); } hello.removechild ("mundo"); XmlOutputter out = new XmlOutputter (format.getPrettyFormat (). SetIndent ("")); out.Output (Doc, new FileOutputStream ("JDOM2.XML"); }}Dom4j
importar java.io.fileOutputStream; importar java.io.filewriter; importar org.dom4j.document; importar org.dom4j.documentHelper; importar org.dom4j.Element; importar org.dom4j.io.outputFormat; importar org.dom4j.io.xmlwriter; classe pública Test1 {public static void main (string [] args) lança exceção {// Crie um documento e defina o nó do elemento raiz do documento: o primeiro método // document document = documentHelper.createDocument (); // // elemento root = documentHelper.createElement ("aluno"); // // document.setrootElement (root); // Crie um documento e defina o nó do elemento raiz do documento: o segundo elemento do método root = documentHelper.CreateElement ("Student"); Documento documento = documentHelper.createCumocument (root); root.addattribute ("nome", "zhangsan"); Elemento helloelement = root.addElement ("hello"); Elemento worldElement = root.addElement ("mundo"); HelloElement.Settext ("Hello"); WorldElement.Settext ("World"); HelloElement.addattribute ("Age", "20"); XmlWriter xmlWriter = new XMLWriter (); xmlwriter.write (document); OutputFormat format = new OputFormat ("", true); XmlWriter xmlWriter2 = new XMLWriter (new FileOutputStream ("Student2.xml"), formato); xmlwriter2.Write (documento); XmlWriter xmlWriter3 = new XMLWriter (new FileWriter ("Student3.xml"), formato); xmlwriter3.Write (documento); xmlwriter3.close (); }} importar java.io.file; importar java.util.iterator; importar java.util.list; importar javax.xml.parsers.documentBuilder; importar javax.xml.parsers.documentBuilderFactory; importar org.dom4j.document; importar org.dom4j.Element; importar org.dom4j.io.domreader; importar org.dom4j.io.saxReader; public class Test2 {public static void main (string [] args) lança exceção {saxreader saxReader = new saxReader (); Documento doc = saxreader.read (novo arquivo ("student2.xml")); Elemento root = doc.getrootelement (); System.out.println ("Elemento root:" + root.getName ()); Listar ChildList = root.Elements (); System.out.println (ChildList.size ()); Listar ChildList2 = root.Elements ("Hello"); System.out.println (ChildList2.Size ()); Elemento primeiro = root.Element ("Hello"); System.out.println (First.attributeValue ("Age")); for (iterator iter = root.ElementIterator (); iter.hasnext ();) {elemento e = (elemento) iter.next (); System.out.println (E.AttributeValue ("Age")); } System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ DocumentBuilderFactory.NewInstance (); D.GeROOTELEMENT (); importar java.io.filewriter; importar org.jdom.attribute; importar org.jdom.document; importar org.jdom.Element; importar org.jdom.output.format; importar org.jdom.output.xmloutputter; classe pública test3 {public static void main (string [] args) lança exceção {document document = new document (); Elemento root = novo elemento ("Lista de contatos"). SetAttribute (novo atributo ("Companhia", "Grupo A")); document.addContent (root); Elemento contactPerson = novo elemento ("contato"); root.AddContent (contactPerson); contactPerson .addContent(new Element("Name").setText("Zhang San")) .addContent(new Element("Company").setText("Company"))) .addContent(new Element("Tel").setText("021-55556666"))) .addContent(new Element("Address") .addContent(new Element ("Street"). SetText ("5th Street")) .AddContent (New Element ("City"). SetText ("Shanghai"))) .AddContent (New Element ("Província"). SetText ("Shanghai"))); XmlOutputter output = new XmlOutputter (format.getttyFormat () .SetInDent ("). SetEncoding (" gbk "); output.Output (document, novo FileWriter (" contact.xml "));}}}