O XML agora se tornou um formato comum de troca de dados. Seu independente de plataforma, independente da linguagem e independente do sistema traz grande conveniência à integração e interação de dados. Para o conhecimento da sintaxe e os detalhes técnicos do próprio XML, você precisa ler documentos técnicos relevantes. O conteúdo incluído aqui inclui DOM (modelo de objeto de documento), DTD (definição de tipo de documento), SAX (API simples para XML), XSD (definição de esquema XML), XSLT (Extensible Stylesheet Language Transformations). Para detalhes, consulte o documento oficial do site W3C http://www.w3.org para obter mais informações.
Os métodos de análise XML são os mesmos em idiomas diferentes, mas a sintaxe da implementação é diferente. Existem dois métodos de análise básica, um é chamado Sax e o outro é chamado DOM. O Sax é baseado na análise do fluxo de eventos e o DOM é baseado na análise da estrutura de árvores de documentos XML. Suponha que o conteúdo e a estrutura do nosso XML sejam os seguintes:
<? xml versão = "1.0" coding = "utf-8"?> <purige> <comester> <name> ddviPluLux </name> <sex> m </xex> <eane> 30 </ge> </funcionário> </funcionário>
Este artigo usa o idioma Java para implementar a geração e a análise dos documentos XML de DOM e Sax.
Primeiro, defina uma interface para operar documentos XML XMLDocument, que define a interface para estabelecer e analisar documentos XML.
/ **** @author hongliang.dinghl* Defina a interface entre o estabelecimento de documentos XML e a análise*/ interface pública xmldocument {/ *** Crie o documento XML* @param fileName Name Nome do caminho completo*/ public void Crerexml (string filename); / *** Parse XML Document* @param fileName File Nome do caminho completo*/ public void parserxml (string filename); } 1. Dom gera e analisa os documentos XML
Define um conjunto de interfaces para a versão analisada do documento XML. O analisador lê o documento inteiro e, em seguida, cria uma estrutura de árvore residente em memória, e o código pode usar a interface DOM para operar essa estrutura de árvore. Vantagens: toda a árvore de documentos está na memória, que é fácil de operar; suporta várias funções, como exclusão, modificação e rearranjo; Desvantagens: todo o documento é transferido para a memória (incluindo nós inúteis), desperdiçando tempo e espaço; Em uso: uma vez analisado o documento, é necessário acessar esses dados muitas vezes; Recursos de hardware suficientes (memória, CPU).
importar java.io.fileInputStream; importar java.io.filenotfoundException; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.inputStream; importar java.io.printwriter; importar javax.xml.parsers.documentBuilder; importar javax.xml.parsers.documentBuilderFactory; importar javax.xml.parsers.parserConfigurationException; importar javax.xml.transform.outputkeys; importar javax.xml.transform.transformer; importar javax.xml.transform.transformerConfigurationException; importar javax.xml.transform.transformException; importar javax.xml.transform.transformerFactory; importar javax.xml.transform.dom.domsource; importar javax.xml.transform.stream.streamResult; importar org.w3c.dom.document; importar org.w3c.dom.Element; importar org.w3c.dom.node; importar org.w3c.dom.nodelist; importar org.xml.sax.saxException; / ** * * @Author Hongliang.dinghl * Dom Generation and Parsing XML Documents */ public class DomDemo implementa Xmldocument {Documento privado; nome do arquivo de string privado; public void init () {try {documentBuilderFactory Factory = DocumentBuilderFactory .NewInstance (); DocumentBuilder Builder = Factory.NewDocumentBuilder (); this.document = builder.newdocument (); } catch (parserConfigurationException e) {System.out.println (e.getMessage ()); }} public void createxml (string filename) {element root = this.document.createElement ("funcionários"); this.document.appendChild (root); Elemento funcionário = this.document.createElement ("funcionário"); Nome do elemento = this.document.createElement ("nome"); name.appendChild (this.document.createTextNode ("ding hongliang")); funcionário.appendChild (nome); Elemento sexo = this.document.createElement ("sexo"); sex.appendChild (this.document.createTextNode ("m")); funcionário.appendChild (sexo); Age do elemento = this.document.createElement ("idade"); Age.appendChild (this.document.createTextNode ("30")); funcionário.appendChild (idade); root.appendChild (funcionário); TransformerFactory tf = transformerFactory.NewInstance (); tente {transformador transformador = tf.newtransformer (); Domsource Source = new DomSource (documento); transformador.setOutputProperty (outputKeys.encoding, "GB2312"); transformador.setOutputProperty (outputKeys.indent, "sim"); PrintWriter pw = new PrintWriter (new FileOutputStream (nome do arquivo)); RESULTO DE STRILHRESULT = NOVO STREAMRESULT (PW); transformador.transform (fonte, resultado); System.out.println ("Gere o arquivo XML com sucesso!"); } catch (transformerConfigurationException e) {System.out.println (e.getMessage ()); } catch (ilegalargumentException e) {System.out.println (e.getMessage ()); } catch (filenotfoundException e) {System.out.println (e.getMessage ()); } catch (transformErexception e) {System.out.println (e.getMessage ()); }} public void parserxml (string filename) {try {documentBuilderFactory dbf = documentBuilderFactory.NewInstance (); Documentbuilder db = dbf.newdocumentBuilder (); Documento documento = db.parse (nome do arquivo); Nodelist Funcionários = document.getChildNodes (); for (int i = 0; i <funcionários.getLength (); i ++) {node funcionário = funcionário.item (i); NodElist FuncionárioInfo = Employee.getChildNodes (); for (int j = 0; j <funcionárioInfo.getLength (); j ++) {nó nó = funcionárioInfo.item (j); NodeList EmployeEMeta = Node.getChildNodes (); for (int k = 0; k <Empregeemeta.getLength (); k ++) {System.out.println (EmployeeMeta.Item (k) .getNodename () + ":" + EmployeeMeta.item (k) .getTextContent ()); }}} System.out.println ("parsermeta.item (k) .getTextContent ());} catch (fileNotfoundException e) {system.out.println (e.tetMessage ();} catch (parserConEssageException) (system.out.print ());} catch (parserConEssage e) {System.out.print (); (ParserConfigurationException e) {System.out.println (E.GetMessage ()); 2. O Sax gera e analisa documentos XML
Para resolver o problema do DOM, o sax aparece. Sax, orientado a eventos. Quando o analisador descobre o início de um elemento, o final de um elemento, o início ou o fim de um documento, etc., ele envia eventos e o programador grava código para responder a esses eventos e salvar os dados. Vantagens: não há necessidade de inserir o documento inteiro com antecedência, leva menos recursos; O código do analisador sax é menor que o código do analisador DOM, adequado para applet e download. Desvantagens: não persistente; Após um evento, se os dados não forem salvos, os dados serão perdidos; apatridia; Somente o texto pode ser obtido no evento, mas não sabe a qual elemento o texto pertence; Ocasões de uso: applet; Apenas uma pequena quantidade de conteúdo do documento XML é necessária e raramente volta para acessar; A memória da máquina é baixa;
importar java.io.fileInputStream; importar java.io.filenotfoundException; importar java.io.ioException; importar java.io.inputStream; importar javax.xml.parsers.parserConfigurationException; 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; / ** * * @Author Hongliang.dinghl * Parsing de documentos sax */ classe pública saxdemo implementa xmldocument {public void createxml (string filename) {System.out.println ("<<"+filename+">>"); } public void parserxml (string filename) {saxparSerFactory saxfac = saxparserFactory.newInstance (); tente {saxparser saxparser = saxfac.newsaxparser (); InputStream is = new FileInputStream (nome do arquivo); saxparser.parse (é, new mysaxHandler ()); } catch (parserConfigurationException e) {e.printStackTrace (); } catch (saxException e) {e.printStackTrace (); } catch (filenotfoundException e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); }} classe MySaxHandler estende o DefaultHandler {boolean hasattribute = false; Atributos atributos = null; public void startDocument () lança saxException {System.out.println ("O documento começou a imprimir"); } public void enddocument () lança saxException {System.out.println ("O documento acabou com a impressão"); } public void startElement (string uri, string localName, string qname, atributos atributos) lança saxException {if (qname.equals ("funcionários")) {return; } if (qname.equals ("funcionário")) {system.out.println (qname); } if (attritutes.getLength ()> 0) {this.attributes = atributes; this.hasattribute = true; }} public void endElement (string uri, string localName, string qname) lança saxException {if (hasattribute && (atributes! = null)) {for (int i = 0; i <attritutes.getLength (); i ++) {System.out.prIntln (attr.Tet.QName (); }}} Public void caracteres (char [] ch, int start, int length) lança saxException {System.out.println (new String (ch, start, comprimento)); }} pacote com.alisoft.facePay.framework.bean; importar java.io.fileInputStream; importar java.io.filenotfoundException; importar java.io.ioException; importar java.io.inputStream; importar javax.xml.parsers.parserConfigurationException; 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; / ** * * @Author Hongliang.dinghl * Parsing de documentos sax */ classe pública saxdemo implementa xmldocument {public void createxml (string filename) {System.out.println ("<<"+filename+">>"); } public void parserxml (string filename) {saxparSerFactory saxfac = saxparserFactory.newInstance (); tente {saxparser saxparser = saxfac.newsaxparser (); InputStream is = new FileInputStream (nome do arquivo); saxparser.parse (é, new mysaxHandler ()); } catch (parserConfigurationException e) {e.printStackTrace (); } catch (saxException e) {e.printStackTrace (); } catch (filenotfoundException e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); }}} classe MySaxHandler estende o DefaultHandler {boolean hasattribute = false; Atributos atributos = null; public void startDocument () lança saxException {System.out.println ("O documento começou a imprimir"); } public void enddocument () lança saxException {System.out.println ("O documento acabou com a impressão"); } public void startElement (string uri, string localName, string qname, atributos atributos) lança saxException {if (qname.equals ("funcionários")) {return; } if (qname.equals ("funcionário")) {system.out.println (qname); } if (attritutes.getLength ()> 0) {this.attributes = atributes; this.hasattribute = true; }} public void endElement (string uri, string localName, string qname) lança saxException {if (hasattribute && (atributes! = null)) {for (int i = 0; i <attritutes.getLength (); i ++) {System.out.prIntln (attr.Tet.QName (); }}} Public void caracteres (char [] ch, int start, int length) lança saxException {System.out.println (new String (ch, start, comprimento)); }}3. DOM4J gera e analisa documentos XML
O DOM4J é uma API Java XML muito, muito excelente, com excelente desempenho, funções poderosas e extremamente fácil de usar, e também é um software de código aberto. Atualmente, você pode ver que mais e mais software Java está usando o DOM4J para ler e escrever XML. Vale a pena mencionar particularmente que até o Jaxm da Sun está usando o DOM4J.
importar java.io.file; importar java.io.filewriter; importar java.io.ioException; importar java.io.writer; importar java.util.iterator; importar org.dom4j.document; importar org.dom4j.documentException; importar org.dom4j.documentHelper; importar org.dom4j.Element; importar org.dom4j.io.saxReader; importar org.dom4j.io.xmlwriter; / ** * * @author hongliang.dinghl * dom4j gerar documentos xml e analisar os documentos xml */ public class Dom4jDemo implementa xmldocument {public void createxml (string filename) {document document = documentHelper.createdocument (); Elemento funcionários = document.addElement ("funcionários"); Elemento funcionário = funcionário.addElement ("funcionário"); Nome do elemento = funcionário.addElement ("nome"); name.settext ("ddvip"); Elemento sexo = funcionário.adDelement ("sexo"); sex.settext ("m"); Elemento idade = funcionário.addElement ("idade"); Age.Settext ("29"); tente {writer fileWriter = new FileWriter (nome do arquivo); XmlWriter xmlWriter = new XMLWriter (FileWriter); xmlwriter.write (document); xmlwriter.close (); } catch (ioexception e) {System.out.println (e.getMessage ()); }} public void parserxml (string filename) {arquivo inputxml = novo arquivo (nome do arquivo); Saxreader saxreader = new saxReader (); tente {document document = saxreader.read (inputxml); Elemento funcionários = document.getrootelement (); for (iterator i = funcionário.ElementIterator (); i.hasnext ();) {elemento funcionário = (elemento) i.next (); for (iterador j = funcionário.Elementiterator (); j.hasnext ();) {node elemento = (elemento) j.Next (); System.out.println (node.getName ()+":"+node.getText ()); }}} catch (documentException e) {System.out.println (e.getMessage ()); } System.out.println ("dom4j parserxml"); }}4. Jdomia gera e passa xml
Para reduzir a quantidade de codificação de DOM e Sax, a JDOM apareceu; Vantagens: 20-80 Princípio, reduzindo bastante a quantidade de código. Ocasiões de uso: as funções a serem implementadas são simples, como análise, criação, etc., mas na parte inferior, os documentos de jddom ainda usa sax (mais comumente usados), DOM e Xanan.
importar java.io.filenotfoundException; importar java.io.fileOutputStream; importar java.io.ioException; importar java.util.list; importar org.jdom.document; importar org.jdom.Element; importar org.jdom.jdomexception; importar org.jdom.input.saxbuilder; importar org.jdom.output.xmloutputter; / ** * * @author hongliang.dinghl * jddom gera e analisou os documentos XML * */ public class JdomDemo implementa Xmldocument {public void createxml (string filename) {document Document; Elemento raiz; root = novo elemento ("funcionários"); document = novo documento (root); Elemento funcionário = novo elemento ("funcionário"); root.AddContent (funcionário); Nome do elemento = novo elemento ("nome"); name.settext ("ddvip"); funcionário.addContent (nome); Elemento sexo = novo elemento ("sexo"); sex.settext ("m"); funcionário.AddContent (sexo); Age do elemento = novo elemento ("idade"); Age.Settext ("23"); funcionário.AddContent (idade); XmlOutputter xmlout = new XmlOutputter (); tente {xmlout.Output (document, new FileOutputStream (nome do arquivo)); } catch (filenotfoundException e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); }} public void parserxml (string filename) {saxbuilder Builder = new saxbuilder (false); tente {document document = builder.build (nome do arquivo); Elemento funcionários = document.getrootelement (); List Employeelist = Employeees.getChildren ("funcionário"); para (int i = 0; ielement funcionário = (elemento) empregaeelist.get (i); listar funcionárioInfo = funcionário.getChildren (); para (int j = 0; jsystem.out.println (((elemento) ânstomInfo.get (j)). getName)+":"+((elemento) »«get »pet (j)). getName)+": "+(() e) {E.PrintStackTrace ();O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.